Bypass ~ / .profile saat login jarak jauh ke server linux


32

Apakah ada cara untuk memotong atau mencegah eksekusi ~/.profileketika masuk ke server Linux jarak jauh menggunakan ssh atau dempul?


Mengapa Anda ingin melakukan ini? Mengapa tidak mengedit nilai dalam file saja? (
Lagipula itu adalah profilmu

7
Hal ini berguna misalnya jika seseorang mengacaukan file .profile dan Anda tidak memiliki akses langsung ke sistem :)
monkey_p

Itulah tepatnya situasi saya menemukan diri saya di monkey_p
Andrew Hampton

Jawaban:


30

Untuk bash:

$ ssh hostname "bash --noprofile"

6
Anda juga akan membutuhkan -topsi, saya pikir.
grawity

2
ssh -t hostname "bash --noprofile". Jika -t tidak ada saya mendapatkan kesalahan "standar harus tty".
nitin

14

Jika Anda mencari untuk menonaktifkan semua skrip login, Anda dapat menggunakan --noprofilebendera untuk menonaktifkan /etc/profile, ~/.profile, dll dan --norcuntuk menonaktifkan ~/.bashrcseperti:

$ ssh 127.0.0.1 "bash --noprofile --norc"

Ingatlah bahwa Anda juga dapat meluncurkan shell alternatif jika tersedia. Saya harus menggunakan ini setelah mengacaukan chsh:

$ ssh 127.0.0.1 sh

Ini kemungkinan besar akan menjatuhkan Anda ke shell kosong (tidak ada prompt) jadi berikan itu lsuntuk memastikan itu berfungsi.


4

Jika mesin target Anda dalam bash shell:

user@host:/$ ssh hostname "bash --noprofile"

Atau, jika ada profil lain yang ingin Anda gunakan

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"

1

Juga, coba gunakan program FTP seperti WinSCP untuk menghapus file login yang salah. Ini akan membuangnya, tetapi setidaknya Anda harus bisa masuk ke shell default


atau mungkin hanya ganti namanya saja.
jezmck

1

Seperti yang disebutkan orang lain, menjalankan dengan --noprofilebendera ketika Anda memulai koneksi akan berfungsi, meskipun jika Anda menggunakan shell yang berbeda ini mungkin atau mungkin bukan opsi.

Salah satu alternatif adalah memiliki skrip profil mendeteksi koneksi SSH itu sendiri dan berperilaku sesuai. Karena koneksi SSH biasanya akan menetapkan sejumlah variabel lingkungan, ini dapat dengan mudah diperiksa. Menambahkan sesuatu seperti baris berikut ke awal profil Anda sudah cukup:

if [ "$SSH_CONNECTION" != "" ]; then
  echo Logging in with ssh
  return
else
  echo Logging in with something that is not ssh
fi

# rest of your profile goes here

The returnakan melewatkan sisa naskah jika $SSH_CONNECTIONvariabel lingkungan diatur, yang biasanya akan dibuat setiap kali koneksi SSH dimulai. Kalau tidak, profil akan dijalankan seperti biasa.

Perhatikan bahwa ini hanya akan melewati skrip profil yang terpengaruh. Semua skrip profil lainnya (mis . /etc/profile:) masih akan diproses kecuali Anda memodifikasinya dengan cara yang sama.

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.