@Mpontes '/ @ javier'in cevabındaki başka bir değişiklik
ssh user@remoteserver -L 9999:localhost:9999 'socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
temizleyici
ssh user@remoteserver -L 9999:localhost:9999 '
socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock&
pid=$!
trap "kill $pid" 0
while echo -ne " \b"; do
sleep 5
done
'
Artıları
- 6.7'den önceki openssh ile çalışır (CentOS 7 gibi)
- Uzak sunucuya yeniden ssh koymak zorunda kalmak yerine socat'ı ssh sonlandırmasında öldürür
- Herkese açık olmayan ssh girişlerine izin verir (ijk çözümünden farklı olarak)
özellik
- Bu
-f
seçenek kullanılmadığından, bir genel anahtar kullanabilir ve arka planda çalışabilir &
veya etkileşimli olarak giriş yapabilir ve Ctrl + Z tuşlarını kullanarak aynı $!
şeyi kullanabilirsiniz .
EKSİLERİ
-f
Ssh seçeneğini kolayca kullanamazsınız , çünkü ssh pidini bu şekilde kaybedersiniz. Bu yöntem, ön planda çalışmaya ve öldürmek için Ctrl + C'ye dayanır.
- Çok daha karmaşık
açıklama
socat ...&
- socat'ı uzak sunucuda arka planda çalıştır
pid=$!
- ödemeyi saklamak
trap kill\ $pid 0
- kill $pid
bas fesih
while :; sleep...
- sonsuz bir döngüde oturmak
echo -ne \ \b
- Yankı boşluğu ve ardından geri al. Bu, ssh bağlantısı kesildiği anda başarısız olur. A ile bu sleep 5
, socat
ssh'den 5 saniyeye kadar sürebilen anlamına gelir
Not: Aslında liman işçisi, bağlantı noktasını kullanarak test 2375
, /var/run/docker.sock
ve çevre değişkeni DOCKER_HOST='tcp://localhost:2375'
, ancak mysql hepsi aynı için çalışmalıdır
Güncelleştirme
Kullanılması SSH Kontroller kullanabileceğiniz -f
sadece aşağıdaki bayraklarını ekleyin yolumu kullanarak bayrağı
-f -o ControlPath=~/.ssh/%C -o ControlMaster=auto
Ve alacaksın
ssh -f -o ControlPath=~/.ssh/%C -o ControlMaster=auto user@remoteserver -L 9999:localhost:9999 'set -m; socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
Artık tüm kontrollü oturumları kullanarak sona erdirebilirsiniz
ssh -o ControlPath=~/.ssh/%C -O exit remoteserver
-o
Seçenekler kaydedilebilir .ssh/config
dosyası veya bunun yerine -S kullanabilirsiniz (ama hala ihtiyaç olacak -o ControlMaster
)