我想scp
在生产环境中实现命令的使用。我不想在自动化脚本中提供我的密码。
有什么办法吗?
我需要一步一步的解决方案。
答案1
继一篇文章来自这里:
你应该使用 ssh-keygen 设置无需密码的 SSH 连接那么它将允许您使用 scp 而无需提示密码或任何其他远程任务:
使用 ssh-keygen 和 ssh-copy-id 执行 SSH 无密码登录的 3 个步骤
ssh-keygen
您可以使用和ssh-copy-id
中的3 个简单步骤登录远程 Linux 服务器,而无需输入密码本文。
ssh-keygen
创建公钥和私钥。ssh-copy-id
将本地主机的公钥复制到远程主机的authorized_keys 文件。它还为远程主机的 home~/.ssh
、 和分配适当的权限~/.ssh/authorized_keys
。
本文还解释了使用时的 3 个小烦恼ssh-copy-id
以及如何ssh-copy-id
与 一起使用ssh-agent
。
步骤 1:在本地主机上使用 ssh-key-gen 创建公钥和私钥
jsmith@local-host$ [Note: You are on local-host here]
jsmith@local-host$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 jsmith@local-host
步骤 2:使用 ssh-copy-id 将公钥复制到远程主机
jsmith@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
jsmith@remote-host's password:
笔记: ssh-copy-id
将密钥附加到远程主机的.ssh/authorized_key
.
步骤 3:无需输入密码即可登录远程主机
jsmith@local-host$ ssh remote-host
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2
[Note: SSH did not ask for password.]
jsmith@remote-host$ [Note: You are on remote-host here]
大多数情况下,上述 3 个简单步骤应该可以完成工作。
我们之前还详细讨论了从 openSSH 到 openSSH 无需输入密码执行 SSH 和 SCP。
如果您使用的是 SSH2,我们之前讨论了从 SSH2 到 SSH2、从 OpenSSH 到 SSH2 以及从 SSH2 到 OpenSSH 执行无密码 SSH 和 SCP。
ssh-copy-id
与ssh-add
/一起使用ssh-agent
。
当没有为选项传递值-i
并且~/.ssh/identity.pub
不可用时,ssh-copy-id
将显示以下错误消息:
jsmith@local-host$ ssh-copy-id -i remote-host
/usr/bin/ssh-copy-id: ERROR: No identities found
ssh-agent
如果您已使用加载密钥ssh-add
,ssh-copy-id
则将从 获取密钥ssh-agent
并复制到远程主机。即,ssh-add -L
当您不将选项传递-i
给ssh-copy-id
.
jsmith@local-host$ ssh-agent $SHELL
jsmith@local-host$ ssh-add -L
The agent has no identities.
jsmith@local-host$ ssh-add
Identity added: /home/jsmith/.ssh/id_rsa (/home/jsmith/.ssh/id_rsa)
jsmith@local-host$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsJIEILxftj8aSxMa3d8t6JvM79DyBV
aHrtPhTYpq7kIEMUNzApnyxsHpH1tQ/Ow== /home/jsmith/.ssh/id_rsa
jsmith@local-host$ ssh-copy-id -i remote-host
jsmith@remote-host's password:
ssh 'remote-host'
现在尝试使用和 check in:登录计算机.ssh/authorized_keys
,以确保我们没有添加您不期望的额外密钥。
笔记:这已经添加了 所显示的键ssh-add -L
。
答案2
你可以
使用
ssh-keygen
评论中建议和回答的程序这里。对于更长的版本,您甚至可以使用此链接 Linux Cookbook。如果您在计算机上使用共享帐户,它可能会打开安全漏洞(该帐户中的每个人都可以访问您进行 ssh-keygen 身份验证的所有计算机)。
编写一个小脚本,要求输入密码并将其通过
scp
命令传递到命令行。例如在MyScript.sh
#/bin/bash sshpass -p $1 scp file.tar.gz user@destination_url:destination_path sshpass -p $1 scp file2.rar user2@other_destination_url:destination_path # ....
您可以使用/bin/bash MyScript.sh yourpassword
或 (如果在使用 更改属性之前chmod u+x MyScript.sh
)使用 来执行它./MyScript.sh yourpassword
。
如果您添加一个命令前的空格并且外壳程序设置正确,此命令将不会在历史记录中完成,也不会在您的密码中完成。
您可以使用 检查它echo $HISTCONTROL
。如果它包含值ignorespace
或ignoreboth
历史记录,则不会记住任何以空格开头的命令。如果没有,您可以export HISTCONTROL=ignorespace
在您的文件中添加~/.bashrc
。
笔记:在$1
脚本内部,您可以引用调用脚本的第一个参数。