我正在尝试在 bash 脚本中运行 sshpass 命令,但它不起作用。
如果我从终端运行相同的命令,它可以正常工作,但在 bash 脚本中运行它就不行。
#! /bin/bash
sshpass -p 'password' ssh user@host command
我知道安全问题,但现在并不重要。
有人可以帮忙吗?我是不是错过了什么。
谢谢
尝试 ssh 的“ -o StrictHostKeyChecking=no ”选项(“-o”是告诉 ssh 您将使用选项的标志)。这接受来自您的 ssh 连接的任何传入 RSA 密钥,即使该密钥不在“已知主机”列表中。
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host 'command'
在which sshpass
命令行中获取绝对路径sshpass
并在 bash 脚本中替换它。
你也应该对command
你试图运行的对象做同样的事情。
问题可能是它没有找到它。
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
!
我不明白接受的答案如何回答从 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;"
这对我有用:
#!/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