Jadi katakanlah salah ketik sesuatu di dalamnya .bashrc
yang mencegahnya masuk melalui ssh
(yaitu ssh login keluar karena kesalahan dalam file). Apakah ada cara orang itu bisa login tanpa mengeksekusinya (atau .bashrc
karena yang satu menjalankan yang lain), atau menghapus / mengganti nama / membatalkan file?
Misalkan Anda tidak memiliki akses fisik ke mesin, dan ini adalah satu-satunya akun pengguna dengan kemampuan ssh in.
Untuk Referensi: .bash_profile
termasuk .bashrc
:
[[ -f ~/.bashrc ]] && . ~/.bashrc
Sunting: Hal-hal yang telah saya coba:
ssh user@host "rm ~/.bashrc"
scp nothing user@host:/RAID/home/tom/.bashrc
ssh user@host "/bin/bash --norc"
Semua memberi kesalahan:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
[ -z "$PS1" ] && return
di awal ./bashrc. Dengan cara ini scp akan berhenti mem-parsing .bashrc setelah baris pertama, dan Anda akan bisa menimpanya jika terjadi keadaan darurat.Jawaban:
Saya pikir satu-satunya pilihan Anda adalah:
ssh sebagai pengguna lain dan su ke akun Anda;
gunakan sesuatu seperti ftp atau smbclient, jika layanan yang relevan diaktifkan pada host;
temukan kerentanan terbuka di layanan jaringan terbuka dan manfaatkan :).
dapatkan admin untuk memperbaiki masalah.
sumber
ssh -t username@hostname /bin/sh
bekerja untukku.sumber
.cshrc
/.tcshrc
bahkan untuk shell yang tidak interaktif.Saya memiliki masalah yang sama, dan entah bagaimana bisa menyelesaikannya. Saya menggunakan ssh untuk mengakses sistem, dan menekan dan menahan Ctrl + c segera setelah saya masuk ke sistem. Kemudian, ~ / .bashrc tidak dibaca, dan saya dapat memodifikasinya.
sumber
Saya menggunakan CVE yang diterbitkan untuk menjalankan perintah sebagai root melalui antarmuka web dalam perangkat lunak pemantauan jaringan yang telah saya instal.
rm /RAID/home/tom/.bashrc
Kemudian saya bisa login dan svn mengembalikan perubahan yang saya buat.
sumber
Anda perlu a) memulai pesta tanpa
source
'ing baik~/.bashrc
atau~/.bash_profile
dan b) karena shell tersebut tidak akan menjadi shell login penuh / telah ada tty terpasang, kekuatan ssh untuk melampirkan tty :sumber
ls
untuk meyakinkan diri sendiri bahwa Anda berada di :). Juga perhatikan ini akan menggunakandumb
istilah, jadi bagi saya nano tidak berfungsiAnda kurang beruntung.
Semua perintah ssh menjalankan shell login Anda.
ssh $COMMAND
menjalankan$SHELL -c $COMMAND
,scp
menjalankan$SHELL -c /path/to/sftp-server
,ssh
hanya menjalankan shell Anda.sumber
Tidak ada jawaban di atas yang dapat melewati shell login ssh. Anda dapat melewati baris perintah penuh, dan itu menjalankan shell jauh untuk memproses perintah dan mengatur lingkungan kerja untuk perintah. Itulah gunanya shell dan itu adalah cara Unix. Anda akan memiliki segala macam masalah kompatibilitas jika Anda mencoba menjalankan sesuatu tanpa shell. Demikian juga, mencoba kontrol-C harus melakukan hal yang sama seperti memanggil keluar yang merupakan perilaku yang Anda coba hindari. Jika bash melanjutkan bugnya. Mengapa orang terus mengatakan bahwa halaman manual mengatakan sesuatu yang berbeda perlu mengutipnya karena itu tidak mengatakan hal semacam itu di halaman manual saya.
Selain itu, pada kebanyakan sistem linux, menentukan / bin / sh TIDAK ADA karena ini hanya symlink ke bash!
Mau tes? Tambahkan pernyataan "echo" untuk Anda .bashrc dan .profile dan lihat mana yang dijalankan. Aku melakukannya. Inilah hasilnya.
ssh user@host
akan mengeksekusi .bash_profilessh user@host /bin/bash
akan mengeksekusi .bashrc, tetapi menurutnya non-interaktif (tanpa prompt).ssh -t user@host /bin/bash
mengeksekusi .bashrc dua kali ... sekali saat login, sekali untuk perintah yang lewat, jadi menentukan shell APAPUN akan selalu menjalankan yang pertama.ssh -T user@host
sama dengan tidak menentukan -T atau -t sama sekali.Sekarang, jika Anda perhatikan, sistem MY tidak menjalankan kedua file, hanya satu atau yang lain. Tetapi poster asli memiliki garis dalam .bash_profile menjalankan .bashrc, jadi .bashrc akan selalu dijalankan tidak peduli apa pun. Seharusnya tidak meletakkan garis itu di sana! Jika garis itu tidak ada, Anda tidak akan memiliki masalah.
Anda harus mencari cara lain atau mencari admin. Untuk inilah admin.
sumber
/bin/sh
memang bisa dieksekusi terlebih dahulu, itu akan membantu, karena Bash tidak memuat~/.bashrc
ketika dipanggil sebagaish
. Jawaban ini adalah superset dari jawaban Anda yang lain, jadi harap hapus yang lain.Sesuatu seperti:
yang tampaknya berfungsi, tetapi perhatikan bahwa PS1 tidak diatur sehingga Anda akan mengetik perintah tanpa prompt.
Ini memiliki keuntungan karena tidak merusak.
sumber
mencoba
^ C ada control-v maka c
sumber
sumber
Menghancurkan ctrl-C berfungsi selama Anda bisa mendapatkan ctrl-C sebelum .bashrc keluar. Sayangnya, ini bisa sulit dilakukan jika
exit
masih awal di .bashrc.Anda dapat memasukkan ctrl-C sesegera mungkin dengan mem-pipkannya ke ssh secara langsung:
Catatan yang
^C
diketik seperti ctrl-V diikuti oleh ctrl-C.Ini memipakan ctrl-C tunggal diikuti oleh input dari terminal pengendali, sementara
-tt
memaksa terminal psuedo dialokasikan. Semua mengatakan ini memberi Anda shell (agak cacat) pada mesin jarak jauh sambil melewati sebanyak .bashrc mungkin.sumber
Anda dapat mencoba menimpa
.bash_profile
file kosong menggunakanscp
perintah. Dari apa yang saya googled, scp menggunakan login non-interaktif yang tidak dibaca.bash_profile
.sumber
Anda juga dapat menghapus file bashrc:
sumber
Jika sistem Anda diatur secara normal, .bash_profile tidak akan dijalankan untuk shell non-interaktif (seperti menjalankan perintah).
Karena Anda menyatakan masalahnya ada di file .bash_profile, cobalah memindahkannya:
sumber
Tolong jangan potong dan jalankan, ubah
user
danhost
, kemudian editletmein
dan simpan sebagai.bashrc
sumber
Kudos to user60069, ini berhasil untuk saya, tapi saya menggunakan file startup shell khusus .bashrc, jadi masuk dengan / bin / sh bekerja untuk saya.
Namun, jika Anda berada dalam situasi "tidak beruntung", saya menawarkan solusi ini, berdasarkan pada solusi user60069 dan Dennis W:
Dennis W menawarkan opsi --norc, yang menurut seseorang tidak bekerja untuk mereka.
Jalankan "man bash" atau "man (shell Anda)" untuk opsi untuk menonaktifkan file start up. Anda hanya perlu menggunakan shell yang menjijikkan untuk waktu yang dibutuhkan untuk memperbaiki masalah.
sumber
Cara lain untuk masuk ke server adalah tanpa profil, silakan temukan perintah di bawah ini
ssh -t user@host bash --noprofile
Untuk AWS menggunakan file pem dan tidak ada pengguna lain
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile
Semoga ini membantu!
sumber
Dari saran dan tanggapan yang diberikan di atas, saya akan mengatakan itu bukan file .bashrc atau .bash_profile. Juga ssh manpage mengatakan bahwa jika Anda menentukan perintah yang akan dieksekusi maka file profil Anda tidak akan dibaca.
Saya sarankan mencoba mengeksekusi shell login yang berbeda (ksh? Csh? Sh?) Dari path absolut; juga, berhati-hatilah bahwa itu mungkin masalah yang sama sekali berbeda (kuota? jalankan dan baca izin pada direktori home Anda?), jadi pendekatan sampingan akan lebih baik. Bisakah Anda meminta pengguna lain untuk melakukan
ls -la $YOUR_HOME_DIR
dan mengirimkan hasilnya kepada Anda?sumber