Etkileşimli moda geçmeden önce ssh oturumunu başlatırken bazı komutları yürütebilir miyim?


13

Ssh komutuyla ssh oturumunu başlatırken iki seçeneğim var - varsayılan env ile varsayılan etkileşimli oturum ve ana dizinden başlayarak - veya rasgele komut yürütüyor ancak etkileşimli değil (hatta hileler ssh "command; command; bash -i -l"çok iyi görünmüyor). Oldukça sık etkileşimli oturum istiyorum, ancak bundan önce bir şey oluyor - normalde bir dizin değişikliği veya bazen sistem ortamı ayarlaması. Bunlar oturumdan oturuma değişebilir, bu yüzden onları .bashrcya da böyle yapıştıramam .

Bunu yapmanın bir yolu var mı?

Yanıtlar:


13

Sonunda sırrı keşfettiğim için kendi kendime cevap veriyorum. Ne -tseçeneği sshne de -lseçeneği bashkendi başına giriş kabuğuna yol açmaz - ancak birlikte çalışırlar.

ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'dizini değiştirir, ortam değişkenlerini ayarlar ve sonra doğru giriş kabuğunu başlatır (şimdiye kadar bulduğum tek fark /etc/motd, bu şekilde görüntülenmemesidir - normalde ssh's veya login' sorumluluktur, bash's - her şeyin göründüğünden başka ve tüm çevresel değişkenler aynıdır).

Bunlar sınırlı olmazsınız yüzden bu ortamı / dizin değişiklikleri, ssh'ın sonra ne PermitUserEnvironmentve ilgili ayarları (tam olarak planlanmış), ancak daha önce .bashrc/ .profileidam. Bu yukarı ve aşağı yönlüdür - bash init komut dosyalarından ayarlanan bir şeyi geçersiz kılmak daha zordur PS1, ancak tam olarak doğru değerleri sshkomut satırlarına toplamak ve .profiletüm ağır kaldırma işlemlerini yapmak daha kolaydır .

Ve gerçekten gerekliyse, .profilekomut satırıyla bir şey yürütmek için bash almak oldukça kolaydır ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'- bu şekilde konduğunda çok çirkin, ancak bu alternatif .profiledosyalar daha önce hazırlanabilir. (söyleyebildiğim kadarıyla komut dosyası bashiçin birkaç aday yeri var .profileve ilk bulunanı yürütecek - . fileböyle bir otomatik geri dönüşe sahip değil, bu yüzden bunu profileyapmak istiyorsanız normalinizin nerede olduğunu kontrol etmeniz gerekecek )


Harika, bunun için teşekkürler! Ben ssh'ing hemen sonra bir kullanıcının hesabına su için bir yol bulmak için bakıyordu ve "-t" seçeneği işe yaradı. Bu seçenek olmadan, kabuğunuzun bir istemi yoktur, komut geçmişi yoktur,
SIGINT'ten

Bu cevap gerçekten yardımcı olur, ancak ;ilk ssh giriş dizesinden birkaç s eksik . Cevabınızı düzenlememe izin vermiyor çünkü yeterince değişmiyorum. Bunu iţe aldým ssh user@host.com -t 'cd /some/where; FOO=BAR; NUMBER=42; bash -l'. Bence istediğin buydu.
Rob Kwasowski

2

.Bashrc dosyasını düzenleyin ve SSH'ye özgü ortam ayarlarınızı şuraya ekleyin:

if [ $SSH_TTY ]; then
    ...
fi

Bu, özellikle SSH oturumları için ayarlar eklemenizi sağlar. 'Elbette, istediğiniz her şey başlangıçta oturuma göre değişen keyfi ortam değişkenleri ayarlamaksa, makineyi bunları yazmaktan başka sizin için nasıl tahmin edebileceğinizi bilmiyorum ... ne olursa olsun,' ayar seçimini temel almak için bazı test edilebilir koşula ihtiyacınız olacak.


2

Gönderen sshadam sayfası:

Ayrıca, ssh ~ / .ssh / ortam değerini okur ve dosya varsa ve kullanıcıların ortamlarını değiştirmesine izin verilirse ortama “VARNAME = value” biçiminde satırlar ekler. Daha fazla bilgi için sshd_config (5) içindeki PermitUserEnvironment seçeneğine bakın.

diyor ki:

PermitUserEnvironment
~ / .ssh / authority_keys içindeki ~ / .ssh / environment ve environment = seçeneklerinin sshd (8) tarafından işlenip işlenmeyeceğini belirtir. Varsayılan "hayır" dır. Ortam işlemeyi etkinleştirmek, kullanıcıların LD_PRELOAD gibi mekanizmalar kullanarak bazı yapılandırmalarda erişim kısıtlamalarını atlamasına olanak sağlayabilir.

Bu tesis , Mickey'nin önerdiği yapıyı ~/.bashrckullanarak uzaktan kumandanızdaki ifadeleri koşullu olarak yürütmek için kullanılabilir .if


1

Sadece bu şekilde çalıştırın: ssh -t yourdomain 'cd /yourpath; bash'

  • -t : böylece bu istem görünecektir
  • ; bash: komutun (burada cd) yürütülmesine ve ssh oturumundan çıkmasına rağmen kontrolü geri döndürmesi için

ServerFault'a hoş geldiniz! Lütfen ne olduklarını açıklamak için komutlar veya komut dosyaları için açıklama ve açıklama ve / veya belgeler sağlayın.
Cory Knutson

1
Teşekkürler @CoryKnutson, istediğiniz gibi değişiklikler yaptım
Sumit Ramteke
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.