Bagaimana cara memeriksa kode keluar dari ssh tunnel?

0

Saya memiliki perintah bentuk:

dd if=/my/block/device | ssh myuser@otherserver "gzip > file.gz"

Bagaimana cara memeriksa apakah perintah ssh gagal karena masalah konektivitas?

Terima kasih.

hebbo
sumber

Jawaban:

1

Dari man 1 bash:

Status pengembalian pipa adalah status keluar dari perintah terakhir, kecuali pipefail opsi diaktifkan. Jika pipefail diaktifkan, status pengembalian pipa adalah nilai dari perintah terakhir (paling kanan) untuk keluar dengan status bukan-nol, atau nol jika semua perintah keluar dengan sukses.

Lalu dari man 1 ssh:

ssh keluar dengan status keluar dari perintah jarak jauh atau dengan 255 jika terjadi kesalahan.

Biasanya (dengan pipefail dinonaktifkan) Anda mendapatkan status keluar dari ssh. Nilai kemungkinan 255 mungkin berasal dari ssh sendiri atau dapat berasal dari perintah apa pun yang Anda jalankan di sisi jarak jauh (tetapi kesalahan "umum" biasanya menghasilkan status keluar "rendah", misalnya 1, 2 ). Dalam praktek 255 menunjukkan ada yang salah.

Status keluar tersedia sebagai parameter khusus $? tepat setelah pipa keluar. Contoh:

$ true | ssh no-such-address.example.org true
# error message here, skipped
$ echo $?
255

Untuk mendapatkan informasi lebih spesifik dari ssh, Anda perlu menganalisis stderr-nya. Lihat manual, khususnya -E (jika tersedia) dan -v pilihan. -E menentukan file log ssh harus menulis, tetapi Anda akan mendapatkan efek yang sama dengan mengarahkan ulang stderr dengan 2>/path/to/logfile. Tentang -v:

-v
Mode Verbose. Penyebab ssh untuk mencetak pesan debug tentang kemajuannya. Ini sangat membantu dalam men-debug koneksi, otentikasi, dan masalah konfigurasi. Berganda -v opsi meningkatkan verbositas. Maksimumnya adalah 3.

Jadi prosedur umumnya seperti ini: setelah ssh keluar, periksa status keluar; jika itu 255, menganalisis logfile jika kegagalannya adalah "karena masalah konektivitas".

Kamil Maciorowski
sumber
0

Gunakan: echo ${PIPESTATUS[1]}

Atau echo ${PIPESTATUS[*]} untuk memeriksa status keluar dari semua perintah.

lihat Contoh: $ PIPESTATUS :

Para anggota $PIPESTATUS Array memegang status keluar dari setiap perintah masing-masing dieksekusi dalam pipa. $PIPESTATUS[0] memegang status keluar dari perintah pertama di dalam pipa, $PIPESTATUS[1] status keluar dari perintah kedua, dan seterusnya.

GAD3R
sumber