SSH setara dengan .profile / .bashrc


14

Saya mencari cara untuk secara otomatis mendefinisikan beberapa alias di dalam sesi saya di server mana pun yang saya ssh. Saya tidak bisa meletakkannya di .bashrcfile di server karena akun pengguna yang saya masuki dibagikan oleh orang lain dan selain itu ada lusinan di antaranya dan memelihara skrip di setiap mesin akan terasa menyakitkan. Saya tahu saya bisa menggunakan expectuntuk mengetik alias secara otomatis tetapi saya hanya ingin tahu apakah OpenSSH memiliki sesuatu yang built-in yang bisa digunakan untuk mencapai ini?

Jawaban:


7

Tidak ada yang salah dengan melakukannya di harapkan. Cara lain yang saya lakukan juga cukup kotor, dengan skrip, pertama-tama scp profil yang ingin Anda jalankan, kemudian ssh in, jalankan dan tetap terhubung.

Jadi, letakkan semua pengaturan profil di file lokal .<local username>-<hostname>-init.sh, dan jalankan skrip di bawah ini untuk masuk ke host jarak jauh.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

Saya suka ini karena tidak memerlukan konfigurasi khusus di server, bagus!
Ramon

4

Anda bisa memasukkan konfigurasi Anda .bashrcdan hanya membiarkan mereka mengeksekusi ketika Anda masuk. Untuk memungkinkan ini Anda bisa melewati variabel lingkungan melalui ssh.

.bashrc modifikasi

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modifikasi:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modifikasi (sisi klien):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modifikasi (sisi klien):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(belum diuji, tetapi harus dilakukan)


Bagaimana hal itu memenuhi tujuan pengaturan secara otomatis pada server mana saja yang digunakan OP?
womble

Itu tidak. Ini memecahkan bagian "akun pengguna yang saya masuki dibagikan oleh orang lain" bagian dari pertanyaan
krissi

Ini hampir persis apa yang saya lakukan, tetapi dengan satu perbedaan - alih-alih menerima variabel lingkungan dari luar, saya mengaturnya di kunci SSH itu sendiri. Ini berarti bahwa .ssh / official_keys berisi baris yang dimulai dengan environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana

3

Dari halaman manual ssh (1) , jika Anda membuat file ~ / .ssh / rc , itu akan dieksekusi SEBELUM shell login pengguna dieksekusi, sehingga memberikan kesempatan untuk melakukan tugas-tugas 'pra-setup' sebelum masuk. Contoh yang diberikan adalah untuk me-mount share jaringan sebelum masuk.

Jika Anda tidak ingin menggunakan file ~ / .ssh / rc secara individual , Anda dapat melakukan hal yang sama dengan / etc / ssh / sshrc . Tes cepat untuk memeriksa nama pengguna khusus Anda atau beberapa metode pengidentifikasian dapat membatasi orang lain untuk tidak memerhatikan hal ini.

/ etc / ssh / sshrc HANYA bersumber jika ~ / .ssh / rc tidak ada, sehingga Anda dapat secara efektif mencapai dua lapisan kompleksitas.


ding ding ding - kami memiliki pemenang!
Dijeda sampai pemberitahuan lebih lanjut.

Merindukan yang itu! Meskipun terlihat menarik, ini masih akan memerlukan pengaturan setiap server secara individual karena di sisi server kan?
Ramon

ya, sisi server, tetapi Anda hanya perlu scp satu file, sekali. Sebenarnya tidak ada cara mudah untuk mengirim aliran perintah untuk segera diproses saat login. {Grin} Beri aku sedikit, mungkin menulis sesuatu ... {tidak hari ini!}
lornix

2

Alias ​​didefinisikan dan ditafsirkan oleh shell.

Sayangnya tidak ada cara untuk sshmeneruskannya ke shell jarak jauh.

Anda bisa menulis sshpembungkus di sisi klien yang mengatur lingkungan yang bagus di sisi yang jauh, tetapi tidak akan cantik.


0

Jika memungkinkan, saya akan menyimpan skrip kecil yang menginisialisasi / mendefinisikan semua yang Anda inginkan pada server yang dapat diakses dari mana saja dan menjalankannya setelah login di setiap server.


0

Salah satu solusi yang mungkin adalah menempatkan skrip Anda yang mengatur semuanya pada server web yang dapat diakses oleh semua server lain.

Maka setiap server hanya perlu skrip kecil untuk melakukan sesuatu seperti:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

Dengan begitu Anda hanya perlu memperbaruinya di satu tempat.


-3

Lihatlah .ssh / config

Berikut ini adalah contoh https://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/


Harap berikan perincian lebih lanjut tentang mengapa Anda pikir ini akan membantu.
Zoredache

Kami benar-benar lebih suka jawaban berisi konten bukan petunjuk ke konten. Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
user9517
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.