2014-06-23 135 views
0

我想獲取命令的輸出在一個變量中,並檢查它是否與其他變量匹配。反向Perl打印輸出在終端

$login1=`ssh ****************** date`; 

此命令手動輸入時會顯示提示「密碼:」。當我從腳本運行它是失去了那個命令和打印提示等待用戶輸入,但我不需要。我只需要得到那個輸出並比較

 if($login1=~ /Password:/) 
      { 
       print " yes"; 
      } 
     else 
       { 
       print "No "; 
       } 

但是,腳本只是在密碼提示處停止。請告訴我如何做到這一點。

+1

這是'ssh'阻止用戶輸入。你想在這裏實現什麼? –

+0

它正在停止,因爲'Password:'不是一個包含行尾的完整行,所以它仍然在等待行結束。 –

+0

我只想捕獲那個命令輸出。我不想在那裏發送任何東西。但它正在我的屏幕上打印。我只想獲得它的輸出並比較它的密碼或其他東西。 – user3381955

回答

0

你可能想看看-f標誌ssh

-f  Requests ssh to go to background just before command execution. 
     This is useful if ssh is going to ask for passwords or 
     passphrases, but the user wants it in the background. This 
     implies -n. The recommended way to start X11 programs at a 
     remote site is with something like ssh -f host xterm. 

如果你想避免密碼,建立一個公共/私有密鑰對沒有密碼(危險,但要比在腳本中輸入密碼更危險)並將公鑰複製到遠程站點。 IIRC,它是這樣的:

localhost $ ssh-keygen -b 2048 -t ecdsa -N '' -f ./datekey 
localhost $ scp ./datekey.pub remotehost:/tmp 
localhost $ ssh remotehost 
(login) 
remotehost $ cat /tmp/datekey.pub >> ~/.ssh/authorized_keys 
remotehost $ logout 

localhost $ ssh -i ./datekey remotehost date 

確保您存儲./datekey地方沒有其他用戶可以在所有訪問它 - 即使沒有讀取權限。


如果你只是試圖檢測,你可能只需要EOF餵它讓它待着:

$login1=`ssh ****************** date < /dev/null`; 
+0

不,請看我上面的評論。我不應該改變這個命令中的任何東西。 – user3381955

+0

我用/ dev/null。但它並沒有移動,而是在屏幕上打印密碼。 – user3381955

+0

我認爲它直接在終端上打印,而不是捕獲它。那麼如何實現這一點。請建議 – user3381955