我想在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的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
!
sftp
和它有什么关系? - BarmarBatchMode=no
,这是默认设置。但是,如果他的问题与该设置有关,那么当他交互式运行命令时,它也不会起作用。 - Barmar我不理解被接受的答案如何回答实际问题:如何在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
echo $?
吗? - Grzegorz$PATH
中,因为cron作业没有运行你的.profile
。 - Barmar