我有一個Perl腳本,它執行此操作:它會在我的系統上生成一個ssh身份驗證密鑰,然後將此密鑰複製到遠程Linux系統以獲得無密碼ssh連接。代碼如下:如何從Perl中顯示命令「ssh-copy-id」的執行狀態?
# Generate an rsa key and store it in the given file
system("ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa 1>/dev/null");
# Copy the generated key to a remote system whose username
# is stored in variable $uname and IP address is stored in variable $ip
system("ssh-copy-id -i /root/.ssh/id_rsa.pub $uname\@$ip 2>&1 1>/dev/null");
我的問題是這樣的:ssh-copy-id
命令需要相當一段時間的密鑰複製到遠程系統。所以,當這個Perl腳本運行時,它會像腳本掛起一樣。
因此,我想要顯示一個「進度信息」:當正在進行復制時,我想顯示「SSH驗證密鑰副本正在進行」,如果複製失敗,顯示「無法複製」,如果它已成功顯示「複製成功」。
我該如何去做這件事?
還有一個(基於查斯的回答):
我試過代碼查斯建議
死「無法fork:$!」除非定義(my $ pid = fork);
然後#child睡退出與隨機退出代碼
除非($ PID){
打印 「連接到服務器」; exec「ssh-copy-id -i /root/.ssh/id_rsa.pub $ uname \ @ $ ip 2> & 1 1>/dev/null」;
exit int rand 255;
}
#parent等待孩子完成
$ | = 1;
print「waiting:」;
my @throbber = qw /。 o O o。 /;
直到($ pid = waitpid(-1,WNOHANG)){
#get下一幀
my $ frame = shift @throbber;
#display it<br />
print $frame;
#put它在幀
推@throbber,$幀的列表的末尾;
#wait a quarter second<br />
select undef, undef, undef, .25;<br />
#backspace over the frame<br />
print "\b";<br />
}
問題是這樣的:
現在的ssh-copy-id命令要求輸入密碼的輸入,同時連接到遠程服務器。所以,輸入「throbber」(即得到顯示的不同大小的圓圈)出現在密碼輸入之後,看起來很奇怪。這是它的樣子:
當前輸出
連接到遠程服務器o0O0o#這是跳動者。輸出並不完全是這樣,但我不能動態地改變打印輸出,可我
密碼:o0O0oXXXXXo0O0o#你得到它的權利,該活動指示器來不必要的密碼提示過
輸出,我旺旺:
連接到遠程服務器o0O0o #The活動指示器應顯示在這裏只,無處
密碼:XXXXX
任何想法,任何人嗎?
多久可以它可能會採取複製SSH密鑰到一些遠程系統?即使通過撥號線路? – innaM 2009-08-20 12:41:43
@Manni你顯然從未遇到過dns-reverse-lookup和GSSAPIAuthentication問題。我不得不坐下來等待一段時間才能連線。 – 2009-08-20 14:14:32
爲什麼靠近我的.ssh/config文件頂部的一行說「GSSAPIAuthentication no」是有原因的。 – innaM 2009-08-26 19:15:31