OS: Debian Jessie
ikan: 2.2.0
OS: Maui Linux
ikan: 2.3.1
Bagaimana cara mereproduksi?
Ketika remote host menggunakan fish shell, pengguna tidak dapat menggunakan rsync dan sftp (sftp pada baris perintah dan di dalam mc). Remote host menggunakan skrip login untuk menampilkan beberapa informasi.
Tautan ke skrip: https://blog.pawel.mydevil.net/index.php/2014/02/20/wyswietlanie-danych-przy-logowaniu-skrypt/
Saya menguji pada dua host. Host pertama adalah Debian Jessie (ikan, versi 2.2.0) dan kedua adalah Maui Linux (ikan, versi 2.3.1).
sftp
sftp root @ remoteHost
password root @ remoteHost :
Menerima pesan terlalu panjang 539831597
bagian dari log auth.log
Kata sandi yang diterima untuk root dari port localHost 48460 ssh2
18 Okt 19:18:59 bpi sshd [7502]: pam_unix (sshd: session): sesi dibuka untuk root pengguna oleh (uid = 0)
18 Okt 19:19:00 bpi sshd [7502]: Menerima pemutusan dari localHost: 11: terputus oleh pengguna
18 Okt 19:19:00 bpi sshd [7502]: pam_unix (sshd: sesi): sesi ditutup untuk root pengguna
rsync:
~ $ sudo rsync -av --delete -e ssh / home / pawel pawel @ remoteHost : / mnt / backup
[sudo] hasło użytkownika pawel:
sandi pawel @ remoteHost :
versi protokol tidak cocok - apakah shell Anda bersih?
(lihat halaman manual rsync untuk penjelasan)
kesalahan rsync: ketidakcocokan protokol (kode 2) di compat.c (176) [pengirim = 3.1.1]
Saya membaca manual dan Internet dan saya menjalankan perintah
"ssh pawel @RemoteIP / bin / true> out.dat"
file "out.dat" berisi hasil script yang dijalankan saat login.
Ketika saya mengomentari tautan ke skrip di file /etc/fish/config.fish, semuanya berfungsi dengan benar.
Bekerja untuk saya. Jenis kegagalan ini biasanya disebabkan oleh file konfigurasi shell yang menulis ke stdout saat sesi tidak interaktif. Dalam kasus ikan Anda harus memastikan bahwa apa pun di _ ~ / .config / fish / config.fish_ (dan skrip sumbernya) yang mungkin menulis ke stdout (atau membaca dari stdin tetapi itu kurang umum) dibungkus dengan if status --is-interactive
... end
blok.
Terima kasih banyak atas bantuannya. Saya meletakkan sesuatu seperti ini
jika status --is-interaktif
/ path / ke / script / yang / print / on / console
akhir
ke /etc/fish/config.fish dan bekerja dengan sempurna. Script hanya berjalan ketika shell dipanggil oleh pengguna, bukan oleh script.
Saya mencoba untuk meletakkan "jika" di dalam skrip ,. tapi saya tidak tahu cara mencampur skrip bash dan skrip ikan.
Mengapa tidak memasukkan petunjuk ini ke FAQ? Saya telah menderita masalah ini untuk beberapa waktu, karena tidak dapat menggunakan rsync dengan cangkang ikan.
Komentar yang paling membantu
Bekerja untuk saya. Jenis kegagalan ini biasanya disebabkan oleh file konfigurasi shell yang menulis ke stdout saat sesi tidak interaktif. Dalam kasus ikan Anda harus memastikan bahwa apa pun di _ ~ / .config / fish / config.fish_ (dan skrip sumbernya) yang mungkin menulis ke stdout (atau membaca dari stdin tetapi itu kurang umum) dibungkus dengan
if status --is-interactive
...end
blok.