生产环境中的 SCP 自动化

生产环境中的 SCP 自动化

我想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-idssh-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-addssh-copy-id则将从 获取密钥ssh-agent并复制到远程主机。即,ssh-add -L当您不将选项传递-issh-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。如果它包含值ignorespaceignoreboth历史记录,则不会记住任何以空格开头的命令。如果没有,您可以export HISTCONTROL=ignorespace 在您的文件中添加~/.bashrc

笔记:$1脚本内部,您可以引用调用脚本的第一个参数。

相关内容