Ssh -N için .ssh / config karşılık gelen seçeneği nedir


14

Yapılandırma dosyamda bu komutla aynı sonuca sahip bir takma ad ayarlamak istiyorum:

ssh -N devdb -L 1234:127.0.0.1:1234

Şunun için .ssh / config girdim devdb:

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

Bir kabuk başlatmamak için yukarıdaki yapılandırmada ne koyabilirim?


Bana rastgele şeylere daha hızlı tünelleme yapmayı düşündüğüm iyi bir soru için +1 (anahtarları hatırlamak için sık sık yapmıyorum, ancak genellikle aynı bağlantı noktalarını kullanıyorum, sadece değişen ev sahibi).
WEBjuju

Yanıtlar:


23

Yani ssh.cOpenSSH 7.6p1 için

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

böylece -Niki şey yapar:

  • no_shell_flagSadece görünür ssh.cve yalnızca için etkindir -Wveya -Naksi takdirde ilgili bazı mantık blokları görünür, seçenekler ControlPersistarka plan çatal karıştığı ve aklı kontrol. Bir seçeneğin doğrudan ayarlayabileceği bir yol göremiyorum.
  • uygun için tekabül ayrıntılı seçenek .readconf.crequest_ttyRequestTTYssh_config(5)

Bu, (OpenSSH'yi yamalayan ve yeniden derleyen ya da ... ile ssh_configgeçiş no_shell_flagyapma seçeneği isteyen maymun dışında ) şöyle bir şey bırakır :

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

Hangi teknik olarak bir kabuk başlatır, ancak bu kabuk hemen kendini yerine catprogram ile değiştirmelidir, bu daha sonra port ileriye bu arada kullanılmasına izin engellemek gerekir. cattaşınabilirdir, ancak girişi (varsa) tüketir veya başarısız olabilir (standart giriş kapalıysa). Başka bir seçenek , sadece engelleyen bir şey çalıştırmaktır .


1
İçinde yapmak için +1 .ssh/config... aferin!
WEBjuju

Bu cevap harika bir araştırma! Teşekkür ederim!
sarı-sarı

Ben tercih ederim RemoteCommand exec sleep infinity.
thomas

3

@thrig bunu sadece kendi içinde yapma isteğinize göre doğru cevaba sahiptir .ssh/config

Ayrıca, diğer tünel komutlarını hızlı hale getirmek için varsayılanlara sahip bir işlev kullanmayı da düşünebilirsiniz (özellikle tünel değişmez, yalnızca ana makine değişirse).


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

Kullanımda olan üç örnek: argüman olmadan işlevde belirtilen varsayılanlar kullanılır:

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

tünel varsayılanı ile farklı bir ana bilgisayarda çalıştırın:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

her iki varsayılan ayarda da yeni bir ana bilgisayara / tünele bir defaya mahsus olmak üzere:

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

0

@ Thrig'in cevabına dayanan daha kullanışlı bir uzaktan kumanda:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _Kullanıcı basına kadar bağlantıyı engeller control+c.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.