Bagaimana cara menjalankan perintah pada login SSH secara otomatis?

13

Setiap kali saya masuk ke server Linux saya, saya ingin beberapa perintah dijalankan secara otomatis (mengatur beberapa variabel, mengubah lokasi, dll.)

Ini perlu dilakukan pada login pengguna, bukan pada sistem start.

Bagaimana saya mengaturnya untuk melakukan ini?

Alasdair
sumber
Anda perlu membaca bagian INVOCATION di bash (1) ( man bash).
Andrew Schulman 8/11

Jawaban:

27

Masukkan perintah ~/.bashrc. Apa pun di sana dieksekusi setiap kali Anda masuk.

Jika Anda memerlukan perintah untuk hanya berjalan ketika masuk melalui ssh (tetapi tidak ketika masuk secara fisik), Anda mungkin bisa menguji keberadaan SSH_CONNECTIONvariabel lingkungan, dan hanya menjalankan perintah jika Anda menemukannya.

David Z
sumber
Saya tidak masuk sebagai root, ini adalah server AWS jadi saya harus masuk sebagai "ec2-user" kemudian mengubah ke root menggunakan "sudo su -". Jadi haruskah saya meletakkan perintah di "/ home /ec2-user/.bashrc"?
5
Ini mengasumsikan ~ / .bashrc bersumber dari ~ / .bash_profile Anda. ~ / .bash_profile akan menjadi skrip yang dipanggil untuk shell login seperti ssh. Saya percaya ~ / .bashrc akan dipanggil jika Anda membuka Terminal Gnome, misalnya, SETELAH sudah masuk.
dgrant
Anda telah membingungkan saya, izinkan saya menjelaskan lebih lanjut: Ini adalah contoh Amazon Web Services, yang merupakan server, jadi tidak ada yang akan secara fisik masuk (Saya bahkan tidak yakin apakah itu secara fisik ada sebagai satu mesin). Saya masuk menggunakan PUTTY dengan nama pengguna ec2-user. Ini menjatuhkan saya di direktori / home / ec2-user. Saya kemudian mengubah ke root pengguna dengan mengetikkan "sudo su -", yang kemudian menjatuhkan saya ke "/ root", maka saya harus mengetik serangkaian perintah, termasuk mengubah saya kembali ke "/ home / ec2-user" dan mengatur beberapa variabel, alias, dll. Jadi ... bagaimana saya mendapatkannya untuk melakukan ini?
Juga, karena saya mengubah pengguna, saya berharap bahwa dalam profil bash pengguna-ec2 saya harus meletakkan hanya "sudo su -", dan kemudian seluruh perintah dalam file root bash?
CATATAN: sebenarnya, .profile yang dipanggil jika ada, kecuali .bash_profile, ada, maka ia dipanggil sebagai gantinya.
Dgrant
11

Masukkan saja ini ke ~ / .bashrc atau /etc/bash.bashrc jika Anda menginginkan ini untuk semua pengguna:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi
Llamageddon
sumber
dan bagaimana saya kehilangan sesi setelah menutup eksekusi?
e-info128
1
@WHK Apa maksudmu dengan kehilangan sesi?
Llamageddon
@Llamageddon: Saya pikir dia bertanya-tanya hal yang sama dengan saya. Jika saya ingin memasukkan seluruh sesi SSH screensaya, saya mungkin menggunakan jawaban Anda dan meletakkannya di screensana sebagai gantinya. Masalahnya adalah bahwa menyelesaikan sesi layar akan kembali ke SSH prompt bukannya logout. Hanya menuliskan komentar ini memberi saya jawaban, meskipun: tambahkan logoutperintah setelah screenperintah.
zondo
Namun ini tidak berfungsi untuk sesi ssh yang tidak menggunakan bash, misalnya ketika saya membuka sesi sftp.
Fabio
@zondo @ e-info128 exec commandakan mengganti shell saat ini dengan apa pun yang Anda jalankan.
Llamageddon
3

Atau, Anda dapat menentukan perintah yang akan dijalankan selama doa ssh:

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

Perintah terakhir dalam daftar harus memulai sesi interaktif di shell pilihan Anda. Jika Anda memiliki banyak perintah untuk dijalankan, pertimbangkan untuk membuat file skrip di server SSH Anda.

Dmitry Grigoryev
sumber
1
INI sangat berguna. Tidak yakin apakah itu jawaban yang ditanyakan si penanya, tetapi orang-orang harus mengetahuinya, karena mungkin tidak jelas. Misalnya "ssh user @ host" export x = 5; bash "Lalu di terminal yang muncul gema $ x menampilkan 5.
jelas
1

Sebenarnya ~/.ssh/rcadalah tempat yang tepat bagi Anda untuk menambahkan perintah

 ~/.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.
sungai hong
sumber
Belum tentu. Ini adalah sebuah lokasi di mana perintah dapat ditempatkan.
Daniel B
Itu bisa BENAR-BENAR membuat seseorang mendapat masalah jika mereka tidak tahu apa yang mereka lakukan. Ini berpotensi berguna dalam kasus sudut, tetapi itu bisa BENAR - BENAR mengacaukan seseorang jika mereka lupa mereka menempatkan perintah di sana atau nama dan jalur file itu. Secara umum akan sangat disukai untuk menempatkan perintah masuk startup di tempat yang diharapkan, .bashrc di sisi jarak jauh dan uji untuk $ SSH_CONNECTION, seperti jawaban lain yang disarankan di sini.
clearlight
0

Untuk terlebih dahulu menjalankan .bashrc pada host jarak jauh, kemudian jalankan perintah yang Anda lewati pada baris perintah (yang akan dapat menggunakan alias dan fungsi yang didefinisikan dalam .bashrc host jarak jauh Anda), kemudian meninggalkan Anda di bash prompt (dengan asumsi perintah yang Anda jalankan exict kembali ke prompt):

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

Opsi -l menjadikannya shell login (mis. jalankan .bashrc)

Opsi -c menyediakan perintah eksplisit yang akan dijalankan oleh bash

cahaya terang
sumber