Di bawah ini adalah skripnya.
Saya ingin masuk ke beberapa server dan memeriksa versi kernel.
#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
sshpass -p password ssh root@$line << EOF
hostname
uname -r
EOF
done
Saya akan mengharapkan output yang berjalan seperti ..
server1_hostname
kernel_version
server2_hostname
kernel_version
dan seterusnya..
Saya menjalankan skrip ini dengan sekitar 80 server di server.txt
Dan output yang saya dapatkan seperti .....
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
========================================================================
================================ WARNING ===============================
========================================================================
This system is solely for the use of authorized personnel. Individuals
using this system are subject to having some or all of their activities
monitored and recorded. Anyone using this system expressly consents to
such monitoring and is advised that any unauthorized or improper use of
this system may result in disciplinary action up to and including
termination of employment. Violators may also be subject to civil and/or
criminal penalties.
========================================================================
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
xxxxdev01
2.6.32-431.23.3.el6.x86_64
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Di sini saya mendapatkan output hanya untuk 1 host, yang xxxxdev01
dan itu juga datang dengan spanduk ssh dan peringatan lainnya.
Saya perlu output dari semua host lain dan tanpa spanduk ssh .. Apa yang salah di sini?
bash
shell-script
ssh
Menjadi Gokul
sumber
sumber
sshpass -p password root@server histname
?ssh -t -t root@
... untuk memaksa terminal semu.Jawaban:
Saya tidak bisa memberi tahu Anda mengapa Anda tidak mendapatkan hasil yang diharapkan dari perintah
hostname
danuname
, tetapi saya dapat membantu dengan teks yang tidak berhubungan.Baris "Pseudo-terminal" sedang dicetak oleh
ssh
karena mencoba mengalokasikan TTY secara default ketika tidak ada perintah untuk dieksekusi disediakan pada baris perintah. Anda dapat menghindari pesan itu dengan menambahkan "-T" ke perintah ssh:Baris "Peringatan: tidak ada akses ke tty" berasal dari shell pada sistem jarak jauh.
csh
dantcsh
akan mencetak pesan itu dalam keadaan tertentu. Mungkin saja dipicu oleh sesuatu di file.cshrc
atau serupa pada sistem jarak jauh, mencoba mengakses beberapa fitur yang memerlukan TTY.sumber
Gunakan kode berikut,
sumber
Jika host Anda disimpan sebagai ikuti
server.txt
Kamu bisa
sumber
Stdin tidak dapat diakses oleh perintah jarak jauh Anda. Yang bisa Anda lakukan adalah menggunakan "-s" flag of bash untuk membaca perintah dari stdin:
Dari manual bash:
Jadi ini harus melakukan apa yang Anda inginkan:
Lihat juga: /programming/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine
sumber
Ini sangat bagus untuk saya:
perhatikan bahwa gunakan
-t -t
bukannya-T
untuk menghindari kesalahansumber
Saya kira ssh sementara memakan sisanya untuk stdin. Anda dapat merujuk Bash FAQ 89 untuk detailnya. Dengan FileDescriptor, kode berikut harus berfungsi sesuai harapan Anda.
sumber