@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
-fseç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İ
-fSsh 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 $pidbas 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, socatssh'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.sockve ç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 -fsadece 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
-oSeçenekler kaydedilebilir .ssh/configdosyası veya bunun yerine -S kullanabilirsiniz (ama hala ihtiyaç olacak -o ControlMaster)