在bash脚本中为ssh命令提供密码,不使用公钥和Expect

str*_*tis 19 linux ssh bash shell

我想SSH在脚本中使用,但是这个脚本不会在我的机器上执行.

在我的实现中有两个限制.

  • 我无法在shell标准之外工作,因此我无法使用,expect因为我不知道它是否可以在这台机器上使用.
  • 我不能指望这台机器将具备public keysSSH.

有哪些可能的选择 - 解决方案?

如何在不添加额外依赖项的情况下以自动且安全的方式为ssh提供所请求的密码?

是否可以在脚本中提供密码?

谢谢大家 :)

小智 29

安装sshpass,然后启动命令:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no yourusername@hostname
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 17

出于安全原因,您必须避免在命令行上提供密码,否则运行ps命令的任何人都可以看到您的密码.最好使用这样的sshpass实用程序:

#!/bin/bash

export SSHPASS="your-password"
sshpass -e ssh -oBatchMode=no sshUser@remoteHost
Run Code Online (Sandbox Code Playgroud)

您可能对如何使用Bash脚本中的密码运行sftp命令感兴趣


And*_*ahl 11

首先:除非你知道为什么这是安全的事情,否则不要把秘密以明文 形式存在(即你已经评估了攻击者知道这个秘密可以造成什么样的伤害).

如果你可以在你的脚本中放置秘密,你可以随身携带一个ssh密钥并在ssh-agentshell中执行:

#!/usr/bin/env ssh-agent /usr/bin/env bash
KEYFILE=`mktemp`
cat << EOF > ${KEYFILE}
-----BEGIN RSA PRIVATE KEY-----
[.......]
EOF
ssh-add ${KEYFILE}

# do your ssh things here...

# Remove the key file.
rm -f ${KEYFILE}
Run Code Online (Sandbox Code Playgroud)

使用ssh密钥的一个好处是,您可以轻松使用强制命令来限制密钥持有者在服务器上可以执行的操作.

更安全的方法是让脚本运行ssh-keygen -f ~/.ssh/my-script-key以创建专用于此目的的私钥,但是您还需要一个例程来将公钥添加到服务器.

  • 我开始得出结论,为脚本的需要生成一个私钥,并在删除它之后将是唯一的解决方案.非常感谢你 (3认同)