如何使用 ssh-keygen 在两台计算机之间建立连接

如何使用 ssh-keygen 在两台计算机之间建立连接

我想在两台计算机之间使用 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 文件中。

  1. 将本地 ~/.ssh/id_dsa.pub 的内容复制到剪贴板
  2. 打开 ssh 会话到远程

本地> ssh 用户@远程

  1. 打开 authorized_keys 文件进行编辑,如果不存在则创建

远程> vi ~/.ssh/authorized_keys

  1. 如果文件为空,请按 i 键,然后将剪贴板内容粘贴到文件中。如果文件有条目,请使用箭头键导航到底部,然后按 i 键并粘贴剪贴板的内容。
  2. 输入 :wq 保存文件
  3. 更改 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

相关内容