SSH girişinde otomatik olarak komut çalıştırma?


13

Linux sunucuma her giriş yaptığımda birkaç komutun otomatik olarak çalışmasını istiyorum (bazı değişkenleri ayarlayın, konumu değiştirin, vb.)

Bu, sistem başlangıcında değil kullanıcı girişinde yapılmalıdır.

Bunu yapmak için nasıl ayarlayabilirim?


INVOCATION bölümünü bash (1) ( man bash) bölümünde okumalısınız .
Andrew Schulman

Yanıtlar:


27

Komutları gir ~/.bashrc. Buradaki herhangi bir şey, her giriş yaptığınızda gerçekleştirilir.

Yalnızca ssh ile giriş yaparken çalıştırmak için komutlara ihtiyacınız varsa (ancak fiziksel olarak giriş yaparken), muhtemelen SSH_CONNECTIONortam değişkeninin varlığını test edebilir ve sadece komutları bulursanız komutları çalıştırabilirsiniz.


Root olarak giriş yapmıyorum, bu bir AWS sunucusu. Bu yüzden "ec2 kullanıcısı" olarak giriş yapıp "sudo su -" kullanarak root olarak değiştirmem gerekiyor. Öyleyse komutları "/home/ec2-user/.bashrc" de yazmalı mıyım?

5
Bu, ~ / .bashrc dosyasının ~ / .bash_profile dosyanızdan alındığını varsayar. ~ / .bash_profile, ssh gibi bir giriş kabuğu için çağrılan komut dosyası olacaktır. Bir Gnome Terminali açarsanız, örneğin, zaten giriş yapmış
olduktan

Kafamı karıştırdınız, daha fazla açıklamama izin verin: Bu bir sanal web sunucusu olan Amazon Web Servisleri örneğidir, bu yüzden hiç kimse fiziksel olarak giriş yapmaz (Fiziksel olarak bir makine olarak var olup olmadığından bile emin değilim). Ec2 kullanıcısı isimli PUTTY kullanarak giriş yapıyorum. Bu beni / home / ec2-user dizinine bırakır. Daha sonra "sudo su -" yazıp kökünü "/ root" a bırakarak değiştiriyorum, daha sonra beni "/ home / ec2-user" olarak değiştirmek ve bazı ayarları yapmak için bir dizi komut yazmam gerekiyor. değişkenler, takma adlar, vb. Öyleyse ... bunu nasıl yapabilirim?

Ayrıca, kullanıcıyı değiştirdiğim için ec2 kullanıcısı bash profilinde yalnızca "sudo su -" ve ardından komutların geri kalanını kök bash dosyasına koymam gerektiğini umuyorum.

NOT: aslında, varsa .bash_profile mevcut değilse, o zaman bunun yerine çağrılırsa çağrılan .profile 'dir.
sabah

11

Bunu tüm kullanıcılar için istiyorsanız, bunu ~ / .bashrc veya /etc/bash.bashrc dizinine koymanız yeterlidir:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

ve yürütmeyi kapattıktan sonra oturumu nasıl kaybederim?
e-info128

1
@WHK Oturumu kaybederek ne demek istiyorsunuz?
Llamageddon

@Llamageddon: Sanırım benimle aynı şeyi merak ediyor. SSH oturumumun tamamını girmek screenistersem cevabınızı kullanabilir screenve yankı yerine oraya koyabilirim . Bununla ilgili sorun, ekran oturumunu bitirmenin oturumu kapatmak yerine SSH istemine geri dönmesidir. Sadece bu yorumu yazmak bana cevap verdi, yine de: logoutkomuttan sonra komutu ekleyin screen.
zondo

Bu, örneğin sftp oturumu açtığımda bash kullanmayan ssh oturumu için çalışmaz.
Fabio

@ ezo info @ e-info128 exec command, yürüttüğünüz neyse o anki kabuğu değiştirir.
Llamageddon

3

Alternatif olarak, aşağıdakilerin çalıştırılması sırasında çalıştırılacak bir komut belirleyebilirsiniz ssh:

$ ssh -t server 'cmd; exec bash -l'

Listedeki son komut tercih ettiğiniz kabukta etkileşimli bir oturum başlatmalıdır. Çalıştırılacak çok fazla komutunuz varsa, SSH sunucunuzda bir komut dosyası oluşturmayı düşünün.


1
BU çok kullanışlıdır. Sorgunun tam olarak sorduğu cevabın bu olup olmadığından emin değilim, ancak insanlar bunu bilmemelidir, çünkü açık olmayabilir. Örneğin, "ssh user @ host" verme x = 5; bash "Sonra açılan terminalde $ x 5 görüntüleniyor.
clearlight

1

Aslında ~/.ssh/rckomut eklemek için doğru yer

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user’s shell (or command) is started.  See the
         sshd(8) manual page for more information.

Şart değil. Bu, komutların yerleştirilebileceği bir konumdur.
Daniel B


Ne yaptıklarını bilmiyorlarsa bu gerçekten birisinin başını derde sokabilir. Köşe durumlarda potansiyel olarak kullanışlıdır, ancak oraya komutları koyduklarını ya da o dosyanın adını ve yolunu unuttuklarında birisini KESİNTİR . Genel olarak, başlangıç ​​oturum açma komutlarını beklenen yere (.bashrc) uzak bir yere koymak ve buradaki diğer cevapların önerdiği gibi $ SSH_CONNECTION için test etmek oldukça tercih edilir.
clearlight

0

İlk önce uzak ana bilgisayarda .bashrc komutunu çalıştırmak , daha sonra komut satırından geçireceğiniz komutları yürütün (bu, .bashrc sunucunuzda tanımlanmış takma adları ve işlevleri kullanabilecek), sonra sizi bir bash komutunda bırakın (varsayarak çalıştırdığınız komutlar, istemine geri döner):

$ ssh user@host "bash -lc cmd; cmd; ..."

-l seçeneği bir giriş kabuğu yapar (örneğin .bashrc komutunu çalıştır)

-c seçeneği açık komut bash çalışacak sağlar

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.