Bir ssh komutu çalıştırırken PATH nasıl ayarlanır?


18

Kullanıcının /bin/bashkabuk olduğu varsayılır /etc/passwd. Sonra ssh user@host commandBash kullanarak komutu çalıştırır. Bununla birlikte, bu kabuk ne giriş ne de interaktiftir, yani ne kaynak ne ~/.bash_profilede ~/.bashrckaynak anlamına gelir . Bu durumda, PATHortam değişkeni yürütülebilir dosyaların bulunabilmesi ve çalıştırılabileceği şekilde nasıl ayarlanır ? Gerçek komutun önüne ön ek yapılması önerilir source ~/.bashrcmi?


5
.bashrckaynaklıdır, ancak muhtemelen üstte etkileşim testi vardır. Bu denetimden önce eklediğiniz şeyler uygulanmalıdır ve sunucu kullanıcı ortamına veya kullanımına izin vermediğinde PATH'yi zorlamak için yaptığım şey budur ~/.pam_environment.
muru

Yanıtlar:


18

Çok az olasılığınız var:

  • Set PATHiçinde sunucuda ~/.ssh/environment(ihtiyaçlara göre etkin olması PermitUserEnvironment yeshalinde sshd_config).
  • İkili dosyaya giden tam yolu kullan
  • Bahsettiğiniz gibi, el ile kaynak .bashrc: komutun başına . ~/.bashrc(veya source)

Bu hemen hemen kullanım durumuna bağlıdır, hangi yöne gideceğiniz.


6
Manuel kaynaklama ~/.bashrcgerekli değildir, varsayılan olarak gerçekleşir. Aslında, bana kötü bir fikir gibi geliyor.
sorontar

$PATH~/.ssh/environmenten azından içeriden genişlemez OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Jaakko

1
@Jaakko Muhtemelen sshd_config uygulamasında devre dışı bırakılmıştır PermitUserEnvironment(son sürümlerde varsayılan)
Jakuje

Ben bir çizgi eklenen çünkü genişleyen değildi, bunu anladım PATH="$PATH:/new/path"benim için ~/.ssh/environmentolmalıydıPATH=$PATH:/new/path
Jaakko

4

Yerel ayarları uzak ayarlarla eşitliyorsunuz .

Yerel olarak, bir bash örneği, yazdığınız şu anda çalışan kabuk:

ssh user@host command

Ssh (başka bir şey değil) komutunu istemci ssh olarak yürütür.
Bunu yapmak için yerel kabuğun bir alt kabuk veya yeni bir kabuk veya oturum açma başlatması gerekmez .

Komut bir lskomut olarak yürütülür : yerel olarak.

Uzaktaki bir sisteme ağ bağlantısı açan istemci ssh komutudur; doğru olarak doğrulanırsa ssh'ye argüman olarak yazılan komutu yürütmek için yeni bir kabuk başlatılır veya herhangi bir argüman verilmezse başka komutlar beklenir o bağlantıda.

Uzak kullanıcının (bu sisteme) giriş için kimliğinin doğrulanması gerektiğinden, bu yeni Uzak kabuk mutlaka bir giriş kabuğu olacaktır. Veya belirli bir komut verilirse, bu komutu kimliği doğrulanmış kullanıcı ayrıcalıklarıyla çalıştırın.

$file sourcedHer dosyanın başına ( uzaktaki sistemde) a ekleyerek hangi dosyaların kaynaklandığını görebilirsiniz ( /etc/dosyaları değiştirmek için kök gereklidir ):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

Ve sonra sadece bir ssh konsolu başlatın:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

Bu durumda, her iki bashrcdosya da okundu çünkü profilegiriş kabuğu doğrudan onları kaynakladığı için değil, onları içerecek komutlara sahipti.

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

Her bashrciki durumda da okunan bu sistemde .

source ~/.bashrcYürütmek için komuta a eklemenize gerek yoktur .

Yolu değiştir

Yapmanız gereken tek şey, /etc/bash.bashrcbu sistemde bir kabuk başlatan tüm kullanıcılar için "$ PATH" değerini değiştirmek için doğru ayarları içermektir . Veya ~/.bashrcihtiyacı olan her kullanıcı için. Bir kullanıcının bir iskelet eklemek (veya düzenlemek) olabilir .bashrciçin /etc/skel/kullanılabilir doğru dosyası var oluşturulan yeni bir kullanıcı olması.

Yukarıdakiler sadece bash için geçerlidir. Tüm kabuklar için çalışmak için ayara ihtiyacınız varsa, büyük olasılıkla ~/.ssh/environmentihtiyacı olan her kullanıcı için ssh dosyasını kullanarak ortam değişkenini PATH olarak ayarlayın. Veya /etc/ssh/sshrcssh sunucusunun çalıştığı sistemde genel bir ayar için kullanın ( man sshddaha fazla ayrıntı için lütfen Dosyalar bölümünü okuyun ).

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.