我正在尝试在bash脚本中运行sshpass命令,但它无法正常工作。
如果我从终端运行相同的命令,它可以正常运行但在bash脚本中运行它不会。
#! /bin/bash
sshpass -p 'password' ssh user@host command
我知道安全问题但现在并不重要。
有人可以帮忙吗?我错过了什么。
由于
答案 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