Ortam değişkenlerini istemciden sunucuya göndermenin resmi yolu ise SendEnv
ve 'dir AcceptEnv
. Sorun, yapılandırmak için sunucuda kök erişimine ihtiyacınız olmasıdır AcceptEnv
. Çoğu sunucu önceden tanımlanmış bir veya daha az sayıda değişken kabul edecek şekilde yapılandırılmıştır.
İstemciden sunucuya ortam değişkenleri göndermek için iki püf noktası buldum, ikisi de sunucuda kök erişimine ihtiyaç duymadan çalışıyor.
bir numara:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME bash
Bu sunucuya bağlanmak ve sonra komutu yerine getirecektir SSH_ORIGIN=$USERNAME@$HOSTNAME bash
ile, $USERNAME
ve $HOSTNAME
zaten istemci tarafında yerini aldı. daha sonra, sunucu tarafında, değişkende bulunan bilgileri daha da işleyebilirsiniz SSH_ORIGIN
.
-t
tabi aksi bash (göreceksiniz deneyin) uçbirimlerden olmadan sunucu üzerinde başlanacaktır.
Hafif bir değişiklik, bilgilerin daha uzun bir ssh zincirinden geçişsel olarak geçirilmesine olanak sağlayacaktır.
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME:$SSH_ORIGIN bash
tartışma:
- bash etkileşimli bir oturum açmayan kabuk olarak başlatıldı (
.profile
okunmadı).
- bash iki defa çalıştırılır (
.bashrc
iki defa okunur). bir kez sshd ile ve bir kez kullanıcı komutu ile.
- sunucudaki varsayılan kabuğunu yok sayarak her zaman bash'ı başlatacak.
iki numara:
ilk önce bir ssh anahtarı oluşturmanız ve bunu ~/.ssh/authorized_keys
sunucuda aktarmanız gerekir . sonra çizgiyi ile hazırlayın command="$SHELL"
. Bu konuda daha fazla bilgi için sshd manpage bakın.
komutu kullanarak ssh sunucusuna bağlanın:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME
bu sunucuya bağlanacaktır ancak bu sefer değişken ataması gerçekleştirilmez. bunun yerine, dize ortam değişkeninde saklanır $SSH_ORIGINAL_COMMAND
. sonra verilen komut ~/.ssh/authorized_keys
çalıştırılır. Bir kez kabukta olduğunuzda içerdiği bilgileri işleyebilirsiniz $SSH_ORIGINAL_COMMAND
.
Yukarıdaki gibi, bu geçişi yapabilirsiniz:
ssh -t server SSH_ORIGIN=$USERNAME@$HOSTNAME:$SSH_ORIGIN
tartışma:
- sunucudaki varsayılan kabuğu başlatacak.
- her zaman sunucudaki varsayılan kabuğu başlatacak. ssh komutuna verdiğiniz herhangi bir komut yoksayılır ve saklanır
$SSH_ORIGINAL_COMMAND
. ssh üzerinden bir komut çalıştırmak istiyorsanız, farklı bir ssh tuşunu kullanabilir veya kabuk init dosyanızın algılaması ve çalıştırılması için kullanabilirsiniz $SSH_ORIGINAL_COMMAND
.