SSH (Ubuntu) kullanılırken ~ / .profile yüklenmiyor


22

Gerçekten çözmek istediğim sorunu yansıtacak şekilde düzenlendi:

Capistrano aracılığıyla konuşlayabilmek için yakut ortamımı kurmam gerekiyor.

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

Bunları ~ deploy / .profile dosyasına koydum, ancak içeri girdiğimde çalıştırılmıyorlar. Fikirler?

Ubuntu 12.04 kullanıyorum.


Orijinal soru şuydu:

Localhost'ta başka bir hesaba ssh yaptığımda, .profile'ımı yüklemiyor. SSH'yi yüklemeye nasıl zorlayabilirim? Ubuntu 12.04 kullanıyorum.

Yanıtlar:


15

Etkileşimli bir giriş kabuğu başlatmak istediğinizi açıkça belirtebilirsiniz:

 ssh user@host bash --login -i 

"Rol" arasında ~/.profile(. Veya ~ / bash_profile) ve .bashrcssh için diğer bazı dosyaları (bkz sahip man sshdetaylar için):

~ / .Ssh / çevre

Çevre değişkenleri için ek tanımlar içerir; yukarıdaki ÇEVRE bölümüne bakınız.

~ / .Ssh / rc

Bu dosyadaki komutlar, kullanıcı oturum açtığında, kullanıcının kabuğu (veya komutu) başlatılmadan hemen önce ssh tarafından yürütülür. Daha fazla bilgi için sshd (8) kılavuz sayfasına bakınız.


“Siz olabilirsiniz” çoğu zaman doğru değildir, çünkü ssh başka bir araç tarafından çalıştırılır (sürekli teslim) ve komut kolayca değiştirilemez.
Jan Hudec

6

.profileyalnızca ssh oturumu olmayan (varsayılan olarak) giriş kabukları için yüklenir. Tüm etkileşimli kabuklar için başlangıçta bir şey çalıştırmak istiyorsanız, .bashrcyerine koyun (veya .zshrckabuğunuzun kullandığı her şeyi).

Ayrıca, yerel makinede başka bir hesaba giriş yapmak istiyorsanız, ssh muhtemelen aşırıya kaçmış demektir. Bunun suyerine falan kullanmak isteyebilirsiniz .


3
Görünüşe .bashrcgöre yüklü değil.
kenorb

Bu yanlış. Bu ise bir giriş kabuğu. Man sayfasından: "Komut belirtilirse, oturum açma kabuğu yerine uzak ana bilgisayarda yürütülür."
mkj


Ssh çalıştırmak için bir komut verildiğinde, varsayılan olarak karşı değil bir tty tahsis ve sonra kabuk ya “interaktif” değildir.
Jan Hudec

4

Bash kullanımı okuma ile sonuçlanmalıdır ~/.bashrc. Aşağıdakiler ksh ve sh (sh modunda bash) ile veya ~/.bashrcoturum açma sırasında çalıştırılmadığında yardımcı olabilir .

Sshd danışır ~/.ssh/environment(sshd_config (5) için izinleri kontrol edin) ve ~/.ssh/sshrcveya ~/.ssh/rc. Bu kurulum imkanı verir ENV=~/.profileya BASH_ENV=~/.profileveSSH_LOGIN=Y

Gelen ~/.profileAşağıdakilerin düzenini ettik (Değiştir ENVile BASH_ENVbash kullanılırken):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

Bash ~/.profileyalnızca bir giriş kabuğu olduğunda ve ~/.bash.bashrcyalnızca terminali varsa, ssh ile bir komut çağrılırken ikisi de varsayılan olarak doğru olmaz. Ancak, maalesef sistem kurulumuna bağlı olarak, sunucu üzerinde ortam ayarlamak için başka seçenekler de vardır:

  • Zsh ~/.zshenvbu durumda bile okur ; bash için karşılık gelen bir yapılandırma dosyası yok.
  • Eğer PermitUserEnvironmentseçenek in üzerindedir /etc/sshd_config, ssh okuyacaktır ~/.ssh/environment. Ne yazık ki bu seçenek varsayılan olarak kapalıdır.
  • Eğer pam_env.soçağrılır user_readenv=1in /etc/pam.d/sshd, bu okuyacaktır ~/.pam_environment. Modülün varsayılan ayarı olmasa da , en azından Ubuntu'da bu şekilde çağrılır .
  • Her şey başarısız olursa, command=çevreyi ayarlayan ve $SSH_ORIGINAL_COMMANDsonunda yürüten bir sarmalayıcı komut dosyası çağıran yetkili anahtarlar dosyasına bir yönerge koyabilirsiniz (komut, kabuk için birdir, bu yüzden eval burada uygundur, ancak emin değilim) .

0

Muhtemelen ~/.bash_profilegeçersiz kılan bir a'nız var ~/.profile.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.