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

rcs*_*oes 8 ssh bash

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

如果我从终端运行相同的命令它工作正常,但它在bash脚本中运行它没有.

#! /bin/bash

sshpass -p 'password' ssh user@host command
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Emi*_*yan 14

不要which sshpass在命令行中获得的绝对路径sshpass,并在bash脚本替换它.

您也应该command尝试运行相同的操作.

问题可能是它找不到它.


小智 14

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

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host 'command'
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 8

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

#!/bin/bash

export SSHPASS=password
sshpass -e ssh -oBatchMode=no user@host
Run Code Online (Sandbox Code Playgroud)

2 -您可以编写脚本sshpasssftpcommandlike这样的:

#!/bin/bash

export SSHPASS=password

sshpass -e sftp -oBatchMode=no -b - user@host << !
   put someFile
   get anotherFile
   bye
!
Run Code Online (Sandbox Code Playgroud)


Sec*_*cko 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
Run Code Online (Sandbox Code Playgroud)

在您的脚本中:

#! /bin/bash

sshpass -p 'password' ssh user@host "ls; whois google.com;"
Run Code Online (Sandbox Code Playgroud)