Cara menggunakan file .bashrc khusus pada login SSH

21

Saya telah menemukan bahwa dengan perusahaan baru saya bekerja dengan saya sering harus server akses linux dengan masa hidup yang relatif singkat. Pada masing-masing server ini saya memiliki akun, tetapi setiap kali ada yang baru dibuat, saya harus melalui kerumitan mentransfer melalui .bashrc saya. Ini mungkin Namun bahwa pada sekitar waktu bulan bahwa server tidak akan ada lagi. Saya juga harus mengakses banyak server lain untuk waktu yang singkat (menit) di mana tidak layak untuk mentransfer melalui .bashrc saya, tetapi karena saya bekerja pada banyak server, ini menambah banyak waktu yang terbuang.

Saya tidak ingin mengubah apa pun di server, tetapi saya bertanya-tanya apakah ada cara untuk memiliki "per-koneksi" .bashrc, jadi setiap kali saya ingin SSH ke server, pengaturan saya akan digunakan untuk sesi itu.

Jika ini memungkinkan, alangkah baiknya jika saya dapat melakukan hal yang sama dengan file konfigurasi lainnya, seperti file gitconfig.

gsingh2011
sumber
Ini bukan solusi per-koneksi tetapi Anda mungkin masih merasa berharga. Lihat basis di GitHub. Lebih detail dalam jawaban ini pada komunitas Pengguna Super.
codeforester

Jawaban:

6

Saya pikir yang Anda inginkan adalah (di .ssh / config pada mesin yang Anda hubungkan):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

maka Anda dapat memimpin dengan:

source .bashrc

dan berada di jalan gembira Anda. LocalCommand mengeksekusi perintah pada server yang Anda hubungkan ketika sampai di sana, tepat sebelum sesi Anda yang sebenarnya.

Saya juga akan memastikan sshds di server dikonfigurasi dengan PermitLocalCommand yes

Ada banyak cara Anda dapat men-tweak bahwa LocalCommand untuk membuatnya bekerja di lingkungan spesifik Anda - Anda dapat meringkuk dari server web internal, atau menarik dari mount nfs misalnya.

Quinn Murphy
sumber
Beberapa catatan. Pertama-tama, saya pikir Anda mengganti urutan file dalam perintah scp, karena saya ingin mentransfer bash saya ke server, dan saya pikir Anda telah membalikkannya. Kedua, Anda bisa menambahkan ; source /path/to/.bashrcsetelah perintah scp agar bersumber secara otomatis. Akhirnya, negatif yang tidak terlalu penting dari metode ini adalah saya harus mengetikkan kata sandi dua kali. Tetapi pada akhirnya itu berhasil, jadi terima kasih.
gsingh2011
maaf soal itu! Bekerja di kepalaku, sangat menyesal tentang perpaduan itu. Apakah Anda dapat mengatur pengaturan kunci tanpa kata sandi di lingkungan Anda? Kami memilikinya di lingkungan kami dan itu adalah hal yang indah. Senang itu berhasil!
Quinn Murphy
@ gsingh2011: Itu source /path/to/.bashrcakan dieksekusi pada mesin yang Anda hubungkan. Perintah di LocalCommandtidak memiliki akses ke sesi ssh.
Oliver
@ Lebih, Anda benar. Saya telah memutuskan untuk mengotomatisasikan sumber .bashrc dari komputer jarak jauh. Saya harus mengubah beberapa hal di sisi server pada login pertama, tetapi jauh lebih nyaman daripada apa yang harus saya lakukan sebelumnya.
gsingh2011
16

Saya pikir sshrc adalah apa yang Anda cari: https://github.com/Russell91/sshrc

sshrc berfungsi seperti ssh, tetapi juga sumber ~ / .sshrc setelah login dari jarak jauh.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Anda dapat menggunakan ini untuk mengatur variabel lingkungan, menentukan fungsi, dan menjalankan perintah post-login. Sesederhana itu, dan itu tidak akan berdampak pada pengguna lain di server - bahkan jika mereka menggunakan sshrc juga. Untuk konfigurasi lebih lanjut, lanjutkan membaca.

RussellStewart
sumber
Harap hentikan spamming dengan kiriman tautan saja. Anda dapat dengan sempurna menambahkan komentar (pokoknya, yang berhubungan dengan sshrc Anda)
Deer Hunter
3
Saya sedang memperbaiki semuanya!
RussellStewart
Selesai Pertama kali saya tergoda untuk melakukan posting link-only. Sekarang saya tahu lebih baik.
RussellStewart
1
Saya menulis dahulu kala (sebelum sshrc) sebuah simil sshrc: github.com/fsquillace/pearl-ssh Itu hanya lebih efisien, kecil dan tanpa dependensi xxd.
user967489
1

Jika Anda belum pernah menekan server sebelumnya, tidak akan ada entri di ~ / .ssh / known_hosts untuk itu.

Anda dapat mencari host yang dikenal dengan "ssh-keygen -F", tetapi Anda harus menguji output tersebut (grep) karena ssh-keygen tidak mengembalikan false jika ada yang terlewatkan. Perhatikan bahwa jika Anda merujuk ke suatu host oleh pengidentifikasi yang berbeda (alamat IP, nama host, FQDN), masing-masing diperlakukan sebagai instance yang terpisah.

Anda bisa menulis pembungkus untuk ssh yang mentransfer lingkungan pengguna Anda ke host itu pada login pertama:

ssh-newenv () {if! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 ditemukan:"; kemudian rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Jika Anda ingin membuat ini lebih kuat, Anda bisa memeriksa keberadaan file lingkungan yang dikenal, hash, atau penanda lain pada host jarak jauh.

Edward Morbius
sumber
0

Saya tidak tahu apakah ada per sesi .bashrc.

Solusi lain adalah dengan menulis skrip kecil yang mentransfer semua konfigurasi favorit Anda ke folder rumah baru Anda.

Mungkin hanya membuat folder dengan semua konfigurasi Anda dengan path dan hanya mentransfernya dengan scp

seperti

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

dan kemudian a

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Itu menghemat waktu.

Christopher Perrin
sumber
0

Saya tidak berpikir itu mungkin, mengingat ssh tidak ada hubungannya dengan Anda .bashrc. Ini adalah shell yang memuat file itu, bukan ssh.

Beberapa ide:

  1. Atur direktori rumah jarak jauh Anda saat pertama kali masuk.
  2. Gunakan NFS untuk me-mount direktori home Anda yang mengandung .bashrc Anda di setiap server. Dengan begitu, Anda memiliki pengaturan yang sama di mana-mana.
  3. Jika Anda OK dengan hanya beberapa variabel lingkungan yang dikirimkan ke server jauh, Anda harus memeriksa SendEnvopsi (lihat ssh_confighalaman manual untuk informasi lebih lanjut). Jika server diatur dengan benar (mis. Server memiliki cukup AcceptEnvdi sshd_config), Anda dapat menggunakan SendEnvuntuk menyalin variabel lingkungan Anda ke host jarak jauh.
  4. Saya tidak tahu apakah itu berhasil, tapi mungkin Anda dapat menggunakan ProxyCommandpengaturan secara keliru (lihat ssh_confighalaman manual) untuk mengirim .bashrcfile Anda atau lainnya sebelum menghubungkan ke host jarak jauh. Itu akan membutuhkan beberapa pengujian. Juga, bersiaplah bahwa ini dapat mengganggu scp.
Oliver
sumber
0

Saya pikir https://github.com/fsquillace/pearl-ssh melakukan apa yang Anda butuhkan.

Saya menulisnya sejak lama sebelum sshrc lahir dan memiliki lebih banyak manfaat dibandingkan dengan sshrc:

  • Itu tidak memerlukan dependensi pada xxd untuk kedua host (yang mungkin tidak tersedia di host jarak jauh)
  • Pearl-ssh menggunakan algoritma pengkodean yang lebih efisien
  • Itu hanya ~ 20 baris kode (sangat mudah dimengerti!)

Contohnya:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
pengguna967489
sumber