~/.profilessh somecommandetkileşimli bir ssh oturumunun (veya etkileşimli bir oturum başlattığınız başka bir oturum açma yönteminin) aksine, çalıştırdığınızda genellikle okunmaz .
Ssh, ortam değişkenlerini göndermeyi destekler. OpenSSH'de, içindeki SendEnvyönergeyi kullanın ~/.ssh/config. Ancak, belirli ortam değişkeninin sunucu yapılandırmasında bir AcceptEnvyönerge ile etkinleştirilmesi gerekir , bu nedenle bu sizin için işe yaramayabilir.
OpenSSH ayrıca sunucu tarafında ortam değişkenlerinin ayarlanmasına izin verir. Yine, buradaki PermitUserEnvironmentyönergeyle birlikte sunucu yapılandırmasında etkinleştirilmelidir . Değişkenler dosyada ayarlanabilir ~/.ssh/environment. Ortak anahtar kimlik doğrulamasını kullandığınızı varsayarsak, anahtar başına değişkenleri de ayarlayabilirsiniz ~/.ssh/authorized_keys: environment="FOO=bar"ilgili satırın başına ekleyin .
Hep düşünüyorum bir şey etmektir zamandır genel anahtar kimlik doğrulaması kullanıyorsanız kadar (işin garibi) çalışır (ab) kullanmak command=seçeneği de authorized_keysdosyaya. Seçeneğe sahip bir anahtar commandyalnızca belirtilen komutu çalıştırmak için iyidir; ancak authorized_keysdosyadaki komut , ortam değişkeni SSH_ORIGINAL_COMMANDkullanıcının belirttiği komuta ayarlanmış olarak çalışır (etkileşimli oturumlar için boştur). Böylece böyle bir şey kullanabilirsiniz ~/.ssh/authorized_keys(elbette, kimlik doğrulamak için bu anahtarı kullanmazsanız geçerli olmaz):
command="export LD_LIBRARY_PATH=\"$HOME\"/lib;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa …
Okunaklılık için satır sonlarını koyduğumu, ancak bunun aslında bir satırda olması gerektiğini unutmayın.
Başka bir olasılık, ~/bin/rsync-wrappersunucuya bir sarıcı komut dosyası yazmaktır.
#!/bin/sh
. ~/.profile
exec rsync "$@"
Sonra geçmesi --rsync-path='bin/rsync-wrapper'üzerine rsynckomut satırında. To argümanı --rsync-pathbir kabuk tarafından genişletilir, bu yüzden isterseniz rsync komut satırını benzer bir şey ileterek kendi içinde tutabilirsiniz --rsync-path='. ~/.profile; rsync'.
Giriş kabuğunuzun bash veya zsh olmasına bağlı başka bir cadde var. Bash ~/.bashrc, etkileşimli olmasa bile rshd veya sshd tarafından çağrıldığında her zaman okur (ancak olarak adlandırılmasa bile sh). Zsh daima okur ~/.zshenv.
## ~/.bashrc
if [[ $- != *i* ]]; then
# Either .bashrc was sourced explicitly, or this is an rsh/ssh session.
. ~/.profile
fi
## ~/.zshenv
if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then
# Not a login shell, but this is an rsh/ssh session
. ~/.profile
fi