如何将sshpass命令放入bash脚本中?

时间:2013-10-10 17:40:38

标签: bash ssh

我正在尝试在bash脚本中运行sshpass命令,但它无法正常工作。

如果我从终端运行相同的命令,它可以正常运行但在bash脚本中运行它不会。

#! /bin/bash

sshpass -p 'password' ssh user@host command

我知道安全问题但现在并不重要。

有人可以帮忙吗?我错过了什么。

由于

5 个答案:

答案 0 :(得分:11)

尝试使用“ -o StrictHostKeyChecking = no ”选项ssh(“ - o”是告诉ssh您将使用选项的标志)。即使密钥不在“已知主机”列表中,它也会接受来自ssh连接的任何传入RSA密钥。

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host 'command'

答案 1 :(得分:10)

在命令行中执行which sshpass以获取sshpass的绝对路径并将其替换为bash脚本。

您也应该对正在尝试运行的command执行相同操作。

问题可能在于找不到它。

答案 2 :(得分:8)

1 - 您可以像这样编写sshpass's ssh命令:

#!/bin/bash

export SSHPASS=password
sshpass -e ssh -oBatchMode=no user@host

2 - 你可以编写sshpass sftp这样的命令:

#!/bin/bash

export SSHPASS=password

sshpass -e sftp -oBatchMode=no -b - user@host << !
   put someFile
   get anotherFile
   bye
!

答案 3 :(得分:4)

我不明白接受的答案是如何回答在bash脚本文件中提供sshpass后如何在服务器上运行任何命令的实际问题。出于这个原因,我提供了答案。

在提供的脚本命令之后,执行如下所示的其他命令:

sshpass -p 'password' ssh user@host "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 user@host "ls; whois google.com;"

答案 4 :(得分: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 $SFTPUSERNAME@$SFTPHOSTNAME << !
    cd $FOLDER
    get $FILEREMOTE $FILELOCAL
    ls
   bye
!

可能你必须安装sshpass:

sudo apt-get install sshpass