Tercih ettiğim yaklaşım SSH yapılandırma dosyasını kullanmaktır (aşağıda açıklanmıştır), ancak kullanımlarınıza bağlı olarak birkaç olası çözüm vardır.
Komut Satırı Bağımsız Değişkenleri
Bu yaklaşım için en iyi cevabın christianbundy'nin kabul edilen cevaba cevabı olduğunu düşünüyorum:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
Çift tırnak işareti kullanıldığında, ( $SHELL
burada olduğu gibi ) çıkış yapılmadıkça değişkenleri yerel makinenizden kullanabilirsiniz . Alternatif olarak, tek tırnak işaretleri kullanabilirsiniz ve kullandığınız tüm değişkenler hedef makinedeki değişkenler olacaktır:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Bash İşlevi
Komutu bash işlevine sararak basitleştirebilirsiniz. Diyelim ki sadece şunu yazmak istiyorsunuz:
sshcd example.com /foo/bar
Bunu aşağıdakilere ekleyerek bu işlemi yapabilirsiniz ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Dizin için uzak makinede bulunan bir değişken kullanıyorsanız, bu diziden kaçtığınızdan veya tek tırnak içine aldığınızdan emin olun. Örneğin, bu JBOSS_HOME
, uzak makinedeki değişkente depolanan dizine cd yapacaktır :
sshcd example.com \$JBOSS_HOME
SSH Yapılandırma Dosyası
Ek davranış satırı bağımsız değişkenleri kullanmak zorunda kalmadan normal ssh komutuna sahip belirli (veya herhangi bir) ana bilgisayar için bu davranışı her zaman görmek isterseniz, ssh config dosyanızda RequestTTY
ve RemoteCommand
seçeneklerini ayarlayabilirsiniz .
Örneğin, yalnızca bu komutu yazmak istiyorum:
ssh qaapps18
ancak her zaman bu komut gibi davranmasını istersiniz:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Bu yüzden bunu dosyama ekledim ~/.ssh/config
:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Artık bu kural, ana makine adında "uygulamalar" bulunan tüm ana makineler için geçerlidir.
Daha fazla bilgi için bkz. Http://man7.org/linux/man-pages/man5/ssh_config.5.html