我想在两台计算机之间使用 rsync 命令,它们都装有 RedHat 5.3,当我在 Google 上搜索如何实现这一点时,我发现我必须在它们之间创建公钥,这样在使用 rsync 命令时就不会提示输入密码。获取公钥并使 rsync 完美运行的最佳方法是什么。
注意:我按照许多教程操作,但没有找到 authorized_keys(在 /root/.ssh/ 下)。我找到了已知主机文件。
答案1
需要在要连接的机器上创建公钥/私钥对,然后将公钥复制到要连接的机器上。为了便于解释,我们将其称为要连接的机器当地的以及您要连接的机器偏僻的。
步骤 1 - 在本地生成密钥对
> ssh-keygen -t dsa
此命令将在你的主文件夹中创建 id_dsa 和 id_dsa.pub,即 ~/.ssh/id_dsa 和 ~/.ssh/id_dsa.pub
第 2 步 - 将公钥添加到您要连接的机器上的 authorized_keys 文件中。
- 将本地 ~/.ssh/id_dsa.pub 的内容复制到剪贴板
- 打开 ssh 会话到远程
本地> ssh 用户@远程
- 打开 authorized_keys 文件进行编辑,如果不存在则创建
远程> vi ~/.ssh/authorized_keys
- 如果文件为空,请按 i 键,然后将剪贴板内容粘贴到文件中。如果文件有条目,请使用箭头键导航到底部,然后按 i 键并粘贴剪贴板的内容。
- 输入 :wq 保存文件
- 更改 authorized_keys 文件的权限
远程> chmod 600 ~/.ssh/authorized_keys
您现在应该能够使用密钥连接到远程机器。
local> ssh user@remote
答案2
由于这是一项常见的任务,我创建了一个 shell 脚本来帮我处理它。如果本地 SSH 密钥对尚不存在,它将创建该密钥对,然后将其复制到远程计算机。
#!/bin/bash
keytype="rsa"
while getopts "t:" opt; do
case $opt in
"t")
keytype=$OPTARG;;
esac
done
shift $(($OPTIND - 1))
if [[ $# != 1 ]]; then
echo "Usage: $0 [-t rsa|dsa] [user]@host"
exit
fi
KEYFILE=~/.ssh/id_$keytype
AUTHFILE=.ssh/authorized_keys
if [[ ! -e $KEYFILE ]]; then
echo "Creating key..."
ssh-keygen -t $keytype -f $KEYFILE
fi
if [[ -e $KEYFILE ]]; then
echo "Logging in..."
ssh $1 "[[ -d .ssh ]] || mkdir .ssh && [[ -e $AUTHFILE ]] || touch $AUTHFILE && chmod 0600 $AUTHFILE && cat - >> $AUTHFILE" < $KEYFILE.pub
fi
最后一个ssh
命令可以替换为ssh-copy-id
。我没有这样做,因为我在发现之前就编写了程序ssh-copy-id
,而且它对我来说一直运行良好。
答案3
当您想使用带密钥的 ssh 时,您首先需要的是一个密钥。
使用 dsa 加密创建密钥(或将 dsa 替换为 rsa 以进行 rsa 加密)
$ ssh-keygen -t dsa
当要求输入“密码”时,我们无需输入。只需按两次回车键即可。ssh-keygen 程序现在将生成您的公钥和私钥,默认情况下,您的密钥存储在主目录中的 .ssh/ 目录中。
为了能够使用您的密钥对登录到远程系统,您首先必须将远程服务器上的公钥添加到远程计算机上主目录中的 .ssh/ 目录中的 authorized_keys 文件文件中。
$ cd ~/.ssh; scp id_dsa.pub username@target:./id_dsa.pub
$ ssh username@target
$ mkdir ~/.ssh; chmod 700 ~/.ssh
$ cat id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ rm -fr id_dsa.pub
现在您可以无需使用密码就通过 ssh 连接到远程系统的帐户。
答案4
当不使用 ssh 端口 22 时,请将此行:ssh $1 "[[ -d .ssh ]]... 更改为 ssh '-p 3433' $1 "[[ -d .ssh ]]... (将 3433 替换为您的 ssh 端口 ID)
很棒的剧本!
干杯,py