Bağlı bir uzak SSH ana bilgisayarından yerel bilgisayarda bir komut çalıştırılsın mı?


13

Diyelim ki SSH ile uzak bir bilgisayara bağlandım. Bu uzak bilgisayardaki bir programdan, yerel bilgisayarımda (bağlantı başlatıcı) bir komut yürütmem gerekiyor.

Hangisi şu soruyu gündeme getirir: yerel bilgisayarda bir komut çalıştırmak için iki bilgisayar arasındaki mevcut bağlantıya sülük yapmak mümkün mü?

ssh user@host-of-connecting-party <command>Ters bir bağlantı kurmak için uzak bilgisayarda komutu çalıştırmayı düşündüm . Ancak bunu otomatikleştirmek daha zordur ve kullanıcının müdahalesini gerektirir. Tam olarak otomatikleştirebileceğimi ya da en azından bağlı kullanıcının kullanıcı / ana bilgisayar adını algılayabileceğimi umuyordum.


Ne yapmak istediğiniz açık. Benim için net olmayan şey, "Tam olarak otomatikleştirebileceğimi ya da en azından bağlı kullanıcının kullanıcı / ana bilgisayar adını algılayabileceğimi umuyordum" dediğin kısımdır. Ne demek istiyorsun?
hytromo

"otomatikleştirmek daha zor ve kullanıcı müdahalesi gerektirecek" bu durumda "güvenli" ile eş anlamlıdır. Uzak bir ana bilgisayar, ona bağlanan istemcilerde komutlar çalıştırabilseydi, bu çok güvensiz olurdu ... bir sunucunun güvenliği ihlal edildiğini ve ona bağlanan herkesin yerel makinelerini enfekte ettiğini düşünün ... bu eğlenceli olurdu :)
Sergey

Yanıtlar:


6

@ 62mkv'nin cevabı çok daha iyi bir çözüm. Bunu kullan.

Bütünlük ve merak için, yerel makinenizde çalışan bir ssh sunucunuz varsa, bağlantı noktası 20202'deki uzak ana bilgisayardan bağlantı noktası 22'deki yerel sunucuya ssh bağlantılarına izin vermek için bir ssh tüneli oluşturabilirsiniz. Örnek komut:

ssh -R20202:localhost:22 remoteuser@remotehost.com

Bu bir ssh bağlantısı başlatır, ancak makinenizde çalışan ssh sunucusuna bir tünel kurar. Ardından, uzak ana bilgisayara ssh'ed edildiğinde bunu yapabilirsiniz:

ssh -p 20202 localuser@localhost

Tabii ki, bu özellikle kafa karıştırıcı olabilir - özellikle teknik birden fazla yuvalanmışsa. Yerel makinenizde yürüttüğünüz her şey uzak ana bilgisayardan geri döndüğünden, biraz gecikme ekler.

Merakları henüz karşılanmamış olanlar için ssh tünellemesi hakkında ek bilgi, bu unix stackexchange sorusunun cevabında bulunabilir .


Bu mükemmel bir cevap. Tam olarak ne bir güvenlik duvarı arkasında ve sadece teamniewer ile erişilebilir bir uzak makineye ssh yapabilmek gerekiyordu. Teamviewer ile daha sonra teamviewer oturumundan ssh tünelini oluşturan makineme geri bağladım ve sonra bilgisayarımdan uzaktan gerektiği kadar ssh oturumunu açabildim.
Marian

Aslında, bu @Marian gibi bir tünel için çok daha iyi bir kullanım örneği. Bunu kendim yaparım.
starbeamrainbowlabs

5

Putty üzerinden VPN sunucumuza ve oradan ssh üzerinden başka bir ana bilgisayara bağladığım sürece, benzer bir ihtiyaç yaşıyorum, bu da doğrudan VPN kurulumu nedeniyle bana ulaşılamıyor.

Bazen sadece "ssh-session" sistemimi çalıştırırken VPN sunucusundaki bir şeyi hızlıca kontrol etmem gerekiyor. Bir yaklaşım, screenfark ettiğim gibi, "normal ssh" ile karşılaştırıldığında biraz gecikme ekleyen bir ssh oturumu çalıştırmaktır . Burada paylaşmak istediğim bir diğer yaklaşım şudur:

SSH oturumu sırasında, tuşuna basın Enter, sonra ~(görüntülenmediğinden emin olun, yani bir komut modunda olduğunuzdan), sonra Ctrl- Z. Bu, ssh istemci sürecini arka plana bir "ana bilgisayar" üzerine koyacaktır ve şu satırlarda bir şey bulacaksınız:

[root@client170 ~]# ~^Z [suspend ssh]

[1]+  Stopped                 ssh root@10.0.0.167
[root@vps291736 ~]#

Şimdi "ana bilgisayar" üzerindesiniz, istediğinizi yapabilirsiniz (ssh oturumunun ne kadar süre hayatta kalacağından emin değilim) ve sonra çalışarak SSH oturumuna dönebilirsiniz fg.

En azından, CentOS tabanlı bir VM'de Putty üzerinden bir Win10 iş istasyonundan ve bu VM'den SSH üzerinden başka bir ana bilgisayara bağlanırken bu benim için çalışıyor.

Umarım birine yardım eder!


2
Eğer varsa PermitLocalCommand yesGözlerinde farklı .ssh/configbir ana bilgisayar için, ayrıca yapabilirsiniz <Enter>~Cardından !<command>.
muru

0

Hem yerel hem de uzak bilgisayarınıza Internet'ten erişilebiliyorsa, uzak bilgisayardaki yerel bilgisayarınızdan bir SSH oturumu açabilir ve ardından bu oturumda yerel bilgisayardaki uzak bilgisayardan başka bir ssh oturumu açabilirsiniz:

localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>

Şeyler de bakabilirsiniz otomasyonu için Fabric (Python bilgisi gereklidir)

from fabric.api import *

@hosts('host1')
def clean_and_upload():
    local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
    local('tar czf /tmp/assets.tgz assets/')
    put('/tmp/assets.tgz', '/tmp/assets.tgz')
    with cd('/var/www/myapp/'):
        run('tar xzf /tmp/assets.tgz')

0

Uzak bilgisayara bağlanmak ve komutları çalıştırmak için sshpass kullanabilirsiniz .

./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'

Yerel bilgisayarda basit kabuk komut dosyası kullanın ve uzak bilgisayarda komut çalıştırmak istediğinizde yukarıdaki kodu kullanın. Genelde otomasyonda kullandığım yöntemlerden biri budur.


0

Hayır, mevcut oturuma giremezsiniz.

Uygulamanızın istemciye tekrar bağlanmak için bir yolu olması gerekir. İstemcide çalışan bir SSH sunucusu varsa ve sunucu istemcideki 22 numaralı bağlantı noktasına erişebiliyorsa SSH çalışır. Parola kimlik doğrulaması yerine anahtar tabanlı kimlik doğrulaması kullandıysanız otomatikleştirmek zor olmaz - bu şekilde kullanıcı müdahalesi gerekmez.

Anahtar tabanlı kimlik doğrulamanın ayarlanması hakkında bilgi burada bulunabilir: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/


0

Başka bir terminale erişiminiz varsa, SIGSTOP'u "kill -19 PID" kullanarak bağlantıyı başlatan ssh komutuna gönderebilirsiniz. Daha sonra istemci makinedeki terminal üzerindeki terminalin kontrolünü elde edersiniz. İşiniz bittiğinde, ssh istemcisini uyandırmak için fg yazarak ssh bağlantısını geri yükleyebilirsiniz.

Ama elbette buradaki soru şudur: Müşteri makinesinde zaten bir terminaliniz varsa neden bunu yapıyorsunuz :)

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.