Saya dapat melakukan sftp
kemarin ke kotak RHEL 5.4 (RedHat) dan hari ini saya tidak bisa.
Pesannya adalah "Received message too long 778199411"
, dan setelah beberapa penyelidikan, itu karena kotak RHEL saya .bashrc
memiliki garis echo "running .bashrc"
- atau menggemakan apa pun, saya pikir.
Jadi mengapa mencetak garis akan memengaruhi sftp
? Rasanya agak seperti masalah desain karena mencetak garis dalam .bashrc
pekerjaan dalam situasi lain seperti masuk atau ssh
dan agak sulit untuk melacak ketika sftp
gagal karena alasan aneh.
Jadi pertanyaannya adalah, mengapa mencetak garis menyebabkan kesalahan seperti itu dan bagaimana jika kita masih ingin mencetak sesuatu .bashrc
? (terutama untuk melihat kapan file ini didapat / dieksekusi).
Jawaban:
Ini adalah masalah yang sudah berlangsung lama. Saya menemukannya sepuluh tahun yang lalu ketika saya pertama kali harus mencampur SSH komersial di tempat kerja dan SSH terbuka di rumah. Saya menabraknya lagi hari ini dan menemukan posting ini.
Jika saya telah mencari "sftp / scp gagal tetapi ssh tidak apa-apa" Saya akan segera diingatkan solusinya!
Sederhananya, .bashrc dan .bash_profile dll harus diam atau mereka mengganggu protokol koneksi sftp / scp.
Lihat FAQ SSH terbuka:
2.9 - sftp / scp gagal saat koneksi, tetapi ssh OK.
sumber
ssh yourhost /usr/bin/true
untuk menyelidiki output ssh Anda. Dalam kasus saya, saya menemukan beberapa perintah di ~ / .bashrc mulai menghasilkan kesalahan.Setidaknya untuk SFTP ini dapat diperbaiki dengan menggunakan
internal-sftp
subsistem, karena tidak membaca.bashrc
atau/etc/motd
.Cukup ganti
/etc/ssh/sshd_config
file dan ubah subsistem SFTP:Dan kesalahan sudah hilang.
sumber
internal-sftp
adalah, IMO, cara yang lebih baik untuk menawarkan dukungan SFTP. Anda dapat melihat pos terkait ini: serverfault.com/questions/660160/…Setiap tanggapan yang saya lihat di mana saja tentang semua ini mengklaim itu adalah hasil cetak yang terlalu banyak melalui
/etc/motd
, atau.bashrc
, dll. Jika Anda memiliki akun yang tidak memiliki.bashrc
, yang/etc/motd
kosong, dan default.bashrc
adalah minimal tanpa hasil cetak ANDA BISA MASIH memiliki masalah. Jika Anda memiliki akun pengguna dengan shell/sbin/nologin
atau/bin/false
kesalahan ini masih akan terjadi.Mengapa kamu melakukan ini ??? Jika Anda mencoba untuk memberikan seseorang root-jailed
sftp
, tanpa akses secure-shell ini akan terjadi.Atasi: izinkan
ssh
dan letakkan mereka di root jail juga. Ini adalah masalah yang perlu diatasissh
, itu terlalu lama datang.sumber
cukup masukkan berikut di atas ~ / .bashrc pada nama pengguna id pada mesin jarak jauh jika id itu menggunakan bash
yang hanya keluar lebih awal dari ~ / .bashrc alih-alih mencari seluruh file ... ini menyelesaikan membuat .bashrc diam ketika Anda tidak masuk ke id itu dan hanya menjalankan scp atau sftp dengan nama pengguna itu sebagai id jarak jauh ... mengutip @Peter Scott dalam jawaban lain: "Sederhananya, .bashrc dan .bash_profile dll harus diam atau mereka mengganggu protokol koneksi sftp / scp."
Atau, jika id jarak jauh itu menggunakan zsh maka tuliskan berikut di atas ~ / .zshrc
Jika shell pada mesin remote Anda tidak menggunakan ~ / .bashrc kemudian buat edit di atas dalam file ~ / .bashrc_profile atau ~ / .profile atau serupa dengan shell Anda pada kotak remote itu
sumber
Mungkin ada satu alasan lagi. Pada RHEL 6 dengan openssh-5.3p1-122.el6.x86_64 kami telah menemukan, bahwa berperilaku salah ketika LOCALE tetap di "C". Ketika diubah dengan:
Kemudian sftp berperilaku dengan benar. Dalam openssh-5.3p1-118 sebelumnya kami belum mengalami perilaku seperti itu sehingga mungkin ada beberapa bug kecil dalam versi ini.
sumber
Dalam kasus saya, untuk membuatnya berfungsi, saya harus menonaktifkan pesan sambutan Ubuntu.
sumber