Ssh girişi düştükten sonra bir dosya kaynağı oluşturun
Tek satırlık soru: Bir savunma ana bilgisayarı aracılığıyla SSH aracılığıyla oturum açtıktan sonra uzak ana bilgisayardaki bir uzak dosyayı otomatik olarak nasıl kaynaklayabilirim?
Uzak bir ana bilgisayarda ssh-ing sonra takma adlar + kabuk kullanıcı tanımlı işlevlerin bir listesini içeren bir dosyayı kaynak etmem gerekiyor.
Dosya uzaktan işlemede / tmp klasöründe bulunur, örn. / Tmp / my-rc
Bulduğum diğer gönderileri ve interneti araştırıyorum
ssh -t [email protected] 'source /tmp/my-rc; bash -l'
Sorun şu ki bir uçbirim alıyorum, ancak yeni bir bash kabuğu olduğu için hiçbir takma ad ayarlanmadı '
Kabuk takıldıktan sonra kaynağın yapılması gerektiğini düşünerek aşağıdakileri denedi ama bu da çalışmıyor. Hata yok, terminali alıyorum ama dosyanın kaynaklandığını düşünmüyorum (/ tmp / my-rc dosyasından kukla mesajı yankılayarak doğrulandı)
ssh -t [email protected] 'bash -l; source /tmp/my-rc'
"" İle bile denedim. kaynak yerine şans yok.
Herhangi bir yardım.
Not1: Bash veya ZSH herhangi bir kabuk çözümü yapardı.
Not2: Actuall ssh, bir proxy komutu, yani bir sekme ana bilgisayarı üzerinden atlanır (sadece alakalı olup olmadığını belirtmek için)
Not3: Uzak ana bilgisayarda bir profil rc veya bashrc veya hatta bir ana dizin ayrıcalığına sahip değilim.
Not4: Güvenli ana bilgisayara giriş yapmak için kullandığım tam komut, aşağıdaki gibi kaleci ana bilgisayarı aracılığıyla
ssh -o ProxyCommand='ssh -W %h:%p ec2-3-218-12-120.compute-1.amazonaws.com' 10.0.31.122
Yanıtlar
İle bash
şunları yapabilirsiniz:
ssh -t user@host '
PROMPT_COMMAND="source /tmp/my-rc
unset PROMPT_COMMAND
" exec bash --norc'
Bu /tmp/my-rc
, komut isteminden önce kaynaklanmasına ve PROMPT_COMMAND
daha sonra olmadığımızdan beri yalnızca bu soruna neden olur .
Sen kaldırmak isteyeceksiniz unset PROMPT_COMMAND
eğer /tmp/my-rc
aslında tanımlayan biter.
Yukarıdakiler, uzak kullanıcının oturum açma kabuğunun Bourne benzeri olduğunu varsayar, ancak onu diğer kabuk türlerinin çoğuna (csh / rc / fish) uyarlayabilmeniz gerekir.
Uzak ana makinelere yazabildiğiniz için, üzerinde /tmp
bir /tmp/myhome
dizin oluşturabilir , kabuklarınızın profilini ve başlatma dosyalarını oraya koyabilir ve ardından Zsh'ı ZDOTIDR
set olarak /tmp/myhome
ve Bash ile HOME
set ile başlatabilirsiniz /tmp/myhome
.
Varsayılan olarak Zsh, içinde başlatma dosyalarını arar $ZDOTDIR
, $HOME
eğer ZDOTDIR
ayarlanmamışsa varsayılan olarak .
Bu nedenle, uzak ana bilgisayarda Zsh'ı şu şekilde başlatabilirsiniz:
ssh -t user@host ZDOTDIR=/tmp/myhome zsh
Ve Bash olarak:
ssh -t user@host HOME=/tmp/myhome bash
Elbette profil / başlatma dosyalarınız konusunda yaratıcı olabilirsiniz - örneğin bunları HOME
daha uygun bir yola ayarlamak için kullanın , diğer dosyaları kaynak olarak kullanın (uzak ana bilgisayarda bir yerde nokta dosyalarınız varsa), vb.
Bu yaklaşımın tek bir komutta yoğunlaştırılmış minimum uygulaması şunlar olabilir:
ssh -t user@host 'mkdir /tmp/myhome
echo ". /tmp/my-rc" >/tmp/myhome/.bashrc
HOME=/tmp/myhome bash'
( Örneğin, uzak ana bilgisayara yeniden bağlanıyorsanız ve dizinin orada olduğunu biliyorsanız, mkdir -p ...
bir hatanın gösterilmesini önlemek için kullanın /tmp/myhome
).
Sizin ProxyCommand
hesaba katıldığında şunlar olabilir:
ssh -t -o ProxyCommand='ssh -W \
%h:%p ec2-3-218-12-120.compute-1.amazonaws.com' \
10.0.31.122 \
'mkdir /tmp/myhome
echo ". /tmp/my-rc" >/tmp/myhome/.bashrc
HOME=/tmp/myhome bash'
Son olarak, girişimleriniz hakkında: ssh -t [email protected] 'bash -l; source /tmp/my-rc'
çalışmıyor çünkü source
komut yalnızca etkileşimli kabuk çıktıktan sonra yürütülüyor.
Eğer UsePAM ayarlandığında evet uzaktaki bilgisayar kullanıcısının sshd_config dosyasında, ardından dosya konfigürasyon dosyasında /etc/pam.d/sshd kimlik doğrulama sürecinde diğer etkinliklerin yanı sıra, başarılı giriş yaptıktan sonra komut yürütme Automize sağlar. Bu kod satırını ekleyin
session required pam_exec.so /etc/myscripts/./sourcing-script
doğrudan bu çizgilerin üstünde
# SELinux needs to intervene at login time to ensure that the process starts
# in the proper default security context. Only sessions which are intended
# to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
burada / etc / myscripts / sourcing-script basitçe uzak ana bilgisayarda başarılı oturum açma üzerine çalıştırılacak komuta sahip bir dosyadır.
#!/bin/bash
source /tmp/my-rc
#echo $(date) >> /etc/myscripts/sourcing-script.log
#cat /tmp/my-rc >> /etc/myscripts/sourcing-script.log
Bu yöntemi, ssh oturumum açılmadan önce bir hizmeti durdurmak ve bir günlük dosyasına rapor etmek için kullanıyorum. Oturumu kapatmadan önce servisi başlatmak için bir crontab kurdum, böylece ssh oturumumla asla paralel çalışmıyor.
Genellikle bunu $HOME/.profile
varyantlarda yaparsınız .
ssh
ile başlayarak ortam değişkenlerini ayarlar SSH_
, bunları kullanarak ssh
veya doğrudan oturum açıp açmadığınızı belirleyebilirsiniz .