10

我正在尝试在 bash 脚本中运行 sshpass 命令,但它不起作用。

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

#! /bin/bash

sshpass -p 'password' ssh user@host command

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

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

谢谢

4

5 回答 5

17

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

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host 'command'
于 2014-06-01T20:04:48.040 回答
16

which sshpass命令行中获取绝对路径sshpass并在 bash 脚本中替换它。

你也应该对command你试图运行的对象做同样的事情。

问题可能是它没有找到它。

于 2013-10-10T18:19:34.937 回答
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
!
于 2013-10-10T17:45:26.480 回答
5

我不明白接受的答案如何回答从 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;"
于 2015-10-13T15:43:21.300 回答
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
于 2016-06-14T10:54:24.300 回答