Ssh bir komutu nasıl çalıştırır?


15

Bash'ı hem istemci hem de sunucuda kullanıyorum. SSH üzerinden bir komut çalıştırırken:

  • ssh <host> 'declare' kabuk değişkenlerinin bir listesini verir.

  • ssh <host> 'mount' montaj noktalarının bir listesini verir.

Ancak, declarebir Bash yerleşik, mountharici bir komuttur. SSH, sunucuda aynı ada sahip bir kabuk yerleşik ve harici komut varsa hangisinin çalıştırılacağını nasıl biliyor?


2
ssh her zaman depolanan kabuğunuzu çalıştırın /etc/passwd. Eğer /usr/sbin/nologingiriş
yapamıyorsanız

Yanıtlar:


21

sshUzaktan kullanıcının kabuğunda sağlamak komutları (elde edilen ishal /etc/passwdgörülebilir olarak,) kaynak kodu :

argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);

Bu nedenle, uzak sunucuda örneğiniz için yürütülen ilgili komutlar şunlardır:

  • bash -c declare
  • bash -c mount

Her ikisi de 'e aktarılır bashve değerlendirilir. Yerleşik öğeler içeride değerlendirilir ve harici komutlar bunu yerel komut satırı isteminizden yapacağınız gibi çağrılır.


Bir kabuk her zaman ssh daemon tarafından başlatılırsa, ilginç olan şey, kullanıcı ssh'yi bir komutla çağırdığında, kullanıcı bir tür oturum açmış olsa bile bu kabuk bir oturum açma kabuğu değildir. Herhangi bir fikir?
Cyker

Evet. Komutu çalıştıran kabuk 1) Giriş kabuğu yok 2) Etkileşimli değil. Etkileşimi -tanahtarla zorlayabilirsiniz , ancak yine de rc dosyalarını yüklemez.
Jakuje

1
Not sshd(sunucu) değil, bu yapıyor ssh(istemci).
ysdx

@ysdx Birlikte çalışıyorlar. İstemci, sunucuya komutu bir kabuk üzerinden yürütmesini söyler ve sunucu bunu yapar.
Barmar
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.