~/.profile
ssh somecommand
etkileş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 SendEnv
yönergeyi kullanın ~/.ssh/config
. Ancak, belirli ortam değişkeninin sunucu yapılandırmasında bir AcceptEnv
yö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 PermitUserEnvironment
yö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_keys
dosyaya. Seçeneğe sahip bir anahtar command
yalnızca belirtilen komutu çalıştırmak için iyidir; ancak authorized_keys
dosyadaki komut , ortam değişkeni SSH_ORIGINAL_COMMAND
kullanı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-wrapper
sunucuya bir sarıcı komut dosyası yazmaktır.
#!/bin/sh
. ~/.profile
exec rsync "$@"
Sonra geçmesi --rsync-path='bin/rsync-wrapper'
üzerine rsync
komut satırında. To argümanı --rsync-path
bir 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