2013-10-10 64 views
4

我想在bash腳本中運行sshpass命令,但它不工作。如何將sshpass命令放入bash腳本中?

如果我從終端運行相同的命令它工作正常,但它運行在一個bash腳本它不。

#! /bin/bash 

sshpass -p 'password' ssh [email protected] command 

我意識到安全問題,但現在並不重要。

有人可以幫忙嗎?我錯過了什麼。

感謝

+0

這是什麼意思「不起作用」?你能解釋一下嗎?你可以在sshpass調用之後回顯$?? – Grzegorz

+0

您是否正在運行cron作業的腳本?也許sshpass不在'$ PATH'中,因爲cron作業不運行'.profile'。 – Barmar

回答

9

which sshpass在命令行來獲取到sshpass的絕對路徑並將其替換到bash腳本中。

你也應該這樣做,你試圖運行command

問題可能是它沒有找到它。

+0

好吧,現在它不起作用。讓我只是把我想要passa的命令放在這裏。我甚至試圖把所有的路徑: /usr/bin/sshpass -p'密碼'/ usr/bin/ssh [email protected] sudo/bin/sh /home/Projecto/AVstart_1.sh – rcsimoes

+0

@ rcsimoes什麼是你得到的錯誤?在終端中運行確切的命令,併發布出錯信息。 –

+0

在命令終端工作,但它並沒有在一個bash腳本,或在python使用os.system。我已經解決了這個問題,並在命令中添加了「StrictHostKeyChecking = no」。感謝這裏的所有幫助。我現在有另一個問題,但我想我應該問一個新的問題,因爲它與此無關 – rcsimoes

7

1 - 您可以編寫腳本sshpass's ssh命令是這樣的:

#!/bin/bash 

export SSHPASS=password 
sshpass -e ssh -oBatchMode=no [email protected] 

2 - 你可以腳本sshpasssftp commandlike這樣的:

#!/bin/bash 

export SSHPASS=password 

sshpass -e sftp -oBatchMode=no -b - [email protected] << ! 
    put someFile 
    get anotherFile 
    bye 
! 
+0

'sftp'與它有什麼關係? – Barmar

+0

sftp是sshpass的命令之一 – anubhava

+0

@Barmar:查看這兩個示例。一個顯示ssh命令另一個顯示sftp – anubhava

9

嘗試「-o StrictHostKeyChecking = no」選項ssh(「 - o」是告訴ssh您將要使用選項的標誌)。這將接受來自ssh連接的任何傳入RSA密鑰,即使密鑰不在「已知主機」列表中。

sshpass -p 'password' ssh -o StrictHostKeyChecking=no [email protected] 'command' 
2

我不理解接受的答案如何回答如何sshpass從bash腳本文件中給出後在服務器上運行的任何命令的實際問題。出於這個原因,我提供了一個答案。


您提供的腳本命令後,執行其他命令象下面這樣:

sshpass -p 'password' ssh [email protected] "ls; whois google.com;" #or whichever commands you would like to use, for multiple commands provide a semicolon ; after the command 

在你的腳本:

#! /bin/bash 

sshpass -p 'password' ssh [email protected] "ls; whois google.com;" 
1

這爲我工作:

#!/bin/bash 

#Variables 
FILELOCAL=/var/www/folder/$(date +'%Y%m%d_%H-%M-%S').csv  
SFTPHOSTNAME="myHost.com" 
SFTPUSERNAME="myUser" 
SFTPPASSWORD="myPass" 
FOLDER="myFolderIfNeeded" 
FILEREMOTE="fileNameRemote" 

#SFTP CONNECTION 
sshpass -p $SFTPPASSWORD sftp [email protected]$SFTPHOSTNAME << ! 
    cd $FOLDER 
    get $FILEREMOTE $FILELOCAL 
    ls 
    bye 
! 

可能你必須安裝sshpass:

sudo apt-get install sshpass