it-swarm.asia

Bir ortam değişkenini ssh komutuyla nasıl iletebilirim?

Ana makinede başlatılan ortam, benim seçimime ayarlanmış belirli bir ortam değişkeniyle başlayacak şekilde, bir ssh komutuna nasıl değer iletebilirim?

EDIT: Amaç, mevcut kde masaüstünü (dcop kwin'den KWinInterface currentDesktop'tan) yaratılan yeni Shell'e aktarmak, böylece bir nfs lokasyonlarını JEdit benzersiz olan orijinal sunucuya geri gönderebilmem Her KDE masaüstü için. ( emacsserver / emacsclient gibi bir mekanizma kullanarak)

Birden fazla ssh örneğinin aynı anda uçuşta olmasının nedeni, ortamımı kurarken, farklı makinelere bir grup farklı ssh örneği açmamdır.

38
Ross Rogers

~/.ssh/environment dosyası, uzak komutlar için kullanılabilen değişkenleri ayarlamak için kullanılabilir. Sshd yapılandırmasında PermitUserEnvironment özelliğini etkinleştirmeniz gerekir.

Bu şekilde ayarlanan değişkenler alt işlemlere aktarılır, böylece:

echo "Foo=Bar" > sshenv
echo "Joe=37" >> sshenv
scp sshenv [email protected]:~/.ssh/environment
ssh [email protected] myscript

ve myscript, Foo'nun Bar ve Joe'nun 37 olduğunu bilecek.

15
John T

SendEnv seçeneği sizin erkeğinizdir.

~/.ssh/config: (yerel olarak)

SendEnv MYVAR

/ etc/ssh/sshd_config: (uzak uçta)

AcceptEnv MYVAR

Şimdi, yerel olarak $MYVAR'nin değeri ne olursa olsun, uzak oturumda da kullanılabilir duruma gelir.
Birden çok kez giriş yaparsanız, her oturumun muhtemelen farklı değerlere sahip kendi $MYVAR kopyası olacaktır.

~/.ssh/environment başka amaçlar için tasarlanmıştır. Uzaktan --- Shell olmayan komutlarını çalıştırırken $ENV dosyası gibi davranır.

50
user15617

Ayrıca korkunç, korkunç bir kesmek var.

Komut dosyanız uzak uçtaki değişkeni kullanıyorsa (yani, ne istersen adlandırabilirsiniz), yerel değişkenleri kötüye kullanabilirsiniz. LC_ * biçimindeki herhangi bir değişken, herhangi bir yapılandırma gereksinimi olmadan sözlü olarak iletilir.

Örneğin, müşterilerimden birinde bir dizi temel sunucu var. Her seferinde başka bir sunucuya ... ve başka bir sunucuya bağlanmak için ... ... bağlanmak zorunda kalmaktan nefret ediyorum. Zekice olması dışında SSH gibi davranan bir senaryom var.

Temel olarak, eğer LC_BOUNCE_HOSTS ayarlanmışsa, onu uzaylara böler ve ilk ana bilgisayarı soyar. Daha sonra zıplar ve aynı betiği çalıştırır. Hedef düğümde, bu liste sonunda boştur, bu yüzden komutu çalıştırır. Ayrıca LC_BOUNCE_DEBUG tarafından ayarlanan bir hata ayıklama moduna (ağ sorunları sırasında harika olan) sahibim. Ssh tüm bunları benim için sihirli bir şekilde geçtiğinden, Host listesinin sonunu tanımak dışında başka bir şey yapmak zorunda değilim (bir - seçeneğiyle yapıyorum).

Bunu her kullandığımda kendimi kirli hissediyorum, ama denediğim her yerde çalışıyor.

28
Jayson

Değerleri aşağıdakine benzer bir komutla iletebilirsiniz:

ssh [email protected] VAR=value cmd cmdargs

İle test edebilirsiniz:

ssh machine VAR=hello env

Tcsh'de aşağıdakiler çalışıyor gibi görünüyor:

ssh machine "setenv VAR <value>; printenv"
27
Waltor
bla="MyEnvSelection=dcop"
ssh [email protected] "export $bla && ./runProg"

Bash ile test ettik:

$ echo '#!/bin/sh' > readEnv.sh
$ echo 'echo "MyEnv: "$MyEnvFromSSH' >> readEnv.sh

$ scp readEnv.sh [email protected]:~/
$ bla="MyEnvFromSSH=qwert"
$ ssh [email protected] "export $bla && ./readEnv.sh"
1
Zeh