AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 2429
Accepted
ScArcher2
ScArcher2
Asked: 2009-05-02 06:14:25 +0800 CST2009-05-02 06:14:25 +0800 CST 2009-05-02 06:14:25 +0800 CST

您如何设置 ssh 以使用密钥而不是用户名/密码进行身份验证?

  • 772

您如何设置 ssh 以使用密钥而不是用户名/密码来验证用户?

linux ssh
  • 9 9 个回答
  • 31033 Views

9 个回答

  • Voted
  1. Best Answer
    C. K. Young
    2009-05-02T06:16:59+08:002009-05-02T06:16:59+08:00

    对于每个用户:他们应该生成(在他们的本地机器上)他们的密钥对使用ssh-keygen -t rsa(rsa可以用dsaor替换rsa1,尽管不推荐这些选项)。然后他们需要将他们的公钥 ( id_rsa.pub) 的内容放入~/.ssh/authorized_keys正在登录的服务器上。

    • 32
  2. Chris Bunch
    2009-05-02T07:28:36+08:002009-05-02T07:28:36+08:00

    我实际上更喜欢ssh-copy-id,这是一个默认在 *nix 上找到的脚本(也可以很容易地放在Mac OS X上),它会自动为您执行此操作。从手册页:

    ssh-copy-id 是一个使用 ssh 登录远程机器的脚本(大概是使用登录密码,所以应该启用密码认证,除非你巧妙地使用了多个身份)

    它还会更改远程用户的主目录、~/.ssh 和 ~/.ssh/authorized_keys 的权限以删除组可写性(如果远程 sshd 在其配置中设置了 StrictModes,则会阻止您登录)。

    如果给出 -i 选项,则使用身份文件(默认为 ~/.ssh/identity.pub),无论您的 ssh-agent 中是否有任何密钥。

    • 24
  3. Node
    2009-05-02T06:17:02+08:002009-05-02T06:17:02+08:00

    哼,不明白。只需创建一个密钥并开始使用。:) HOWTO 另外你可以禁止通过密码登录。在例如 /etc/ssh/sshd_config 中:

    PasswordAuthentication no
    
    • 7
  4. ConroyP
    2009-05-02T06:18:34+08:002009-05-02T06:18:34+08:00

    这是相当直接的做法——这里有一个简单的演练。

    要点是:

    • ssh-keygen在你的机器上运行。这将为您生成公钥和私钥。
    • 将公钥的内容(可能在 中~/.ssh/id_rsa.pub)复制并粘贴到~/.ssh/authorized_keys远程计算机上。

    重要的是要记住,这将使有权访问您机器上的私钥的任何人都可以访问远程机器,因此在生成密钥对时,您可以选择在此处输入密码以提高安全性。

    • 3
  5. Gareth
    2009-05-06T15:01:41+08:002009-05-06T15:01:41+08:00

    供 Windows 用户设置 putty

    • http://www.howtoforge.com/ssh_key_based_logins_putty
    • 3
  6. Drew Stephens
    2009-05-10T09:42:09+08:002009-05-10T09:42:09+08:00

    总结其他人所说的话,设置 SSH 密钥既简单又无价。

    在您将要通过 SSH 连接的机器上,您需要生成您的密钥对:

    claudius:~$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
    Enter passphrase (empty for no passphrase): <PASSPHRASE>
    Enter same passphrase again: <PASSPHRASE>
    Your identification has been saved in /home/dinomite/.ssh/id_rsa.
    Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
    The key fingerprint is:
    a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius
    

    只需在注明的地方按 Enter 并在出现提示时输入密码 - 理想情况下,这与您在当前主机和您将通过 SSH 连接的主机上的常规登录密码不同。

    接下来,您需要将刚刚生成的密钥复制到要通过 SSH 连接到的主机上。大多数 Linux 发行版都有ssh-copy-id执行此操作的工具:

    claudius:~$ ssh-copy-id caligula.dinomite.net
    Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:
    
      .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.
    

    如果您的发行版没有,那么您应该将密钥复制到目标主机并将其添加到(可能存在的).ssh/authorized_keys文件中:

    claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
    id_dsa.pub                                    100% 1119     1.1KB/s   00:00
    claudius:~$ ssh caligula.dinomite.net
    Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
    Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys
    

    最后,为了最大限度地利用 SSH 密钥,您需要运行 SSH 代理。如果您使用桌面环境(Gnome、KDE ​​等),那么只需注销并重新登录即可为您启动一个 SSH 代理。如果没有,您可以将以下内容添加到您的 shell RC 文件(.bashrc、.profile等):

    SSHAGENT=/usr/bin/ssh-agent
    SSHAGENTARGS="-s"
    if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
        eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
    fi
    
    • 2
  7. Vic K
    2017-10-14T07:10:59+08:002017-10-14T07:10:59+08:00

    这是一个清单。如果有人逐点遵循它,那么应该涵盖无密码登录的最常见问题。这些要点中的大部分都在其他地方提到过;这是一个聚合。

    每台计算机上必须有一个~/.ssh目录,该目录chmod 700位于将发起或接收连接的帐户下。

    (私有)密钥必须在没有密码的情况下生成,或者可以启动一个代理,该代理将持有一个带有密码的密钥的解密版本供客户端使用。用 启动代理ssh-agent $SHELL。这是$SHELL我花了一段时间才找到的部分。如果您想使用代理,请参阅手册页,因为有很多详细信息。

    不要忘记,最新版本的 sshd 默认不接受弱(<2048 位 DSA)密钥。

    必须在客户端计算机上完成以下操作才能发起连接。

    1. 您的私钥必须放置在适当的位置~/.ssh/id_rsa。~/.ssh/id_dsa您可以使用其他名称,但它必须包含在原始计算机上 ssh 命令的 -i 选项中,以明确指示私钥。

    2. 您的私钥必须是chmod 600.

    3. 检查您的主文件夹是否为chmod 700.

    现在允许机器接收请求。一个常见的模型是管理员允许您访问您不拥有的机器(如共享网络托管)。因此,使用 ssh 的想法是,您将您的公钥提供给给您帐户的任何人。这就是为什么您通常不会将私钥放在接收请求的机器上。但是,如果您希望这台机器也能进行传出 ssh,那么您必须按照上述步骤将 is 视为原始机器。

    1. 您的公钥必须放在将接收连接~/.ssh/authorized_keys的帐户下调用的文件中。您也可以在此处放置允许通过此帐户连接的其他密钥。如果您在 vi 中并将密钥从 PuTTY 中的粘贴缓冲区粘贴到文件中,那么特别棘手的事情是:密钥以“ssh-”开头。如果您未处于插入模式,则第一个“s”会将 vi 置于插入模式,其余的键看起来就好了。但是您会在键的开头缺少一个“s”。我花了好几天才找到它。
    2. 我喜欢chmod 600 ~/.ssh/authorized_keys。它必须至少是 gw。
    3. 现在,您必须将主机指纹添加到缓存中。转到机器 A,然后手动 ssh 到机器 B。第一次,您会收到类似“您要添加...到主机密钥缓存吗?”的查询。如果您尝试让自动化(例如脚本)使用此登录,则必须确保自动化正在使用的 ssh 客户端不会收到此提示。
    • 1
  8. Neall
    2009-05-02T07:30:01+08:002009-05-02T07:30:01+08:00

    正如其他人所说,您的用户应该在他们的客户端机器上使用 ssh-keygen 为自己制作密钥对,并将他们的公钥添加到他们想要登录的机器上的 ~/.ssh/authorized_keys 中。

    不过,对于更详细的信息,我强烈推荐SSH,The Secure Shell。

    • 0
  9. Bruno Bronosky
    2009-06-11T13:05:03+08:002009-06-11T13:05:03+08:00

    这里有很好的建议,所以我不会重复。一旦您设置了一台服务器以允许您使用密钥登录,您就可以设置其他服务器以使用此衬垫执行相同的操作:

    remote=server1 server2 server3 server4
    for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done
    

    只需 cd 到您的主目录,将变量 remote 定义为一个或多个服务器名称,然后一次执行一堆。它要求的密码将是您远程服务器的 ssh 密码。您当然可以使用没有 for 循环的简化版本:

    tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"
    

    记住:只复制你的公钥。您不希望您的私钥存放在任何使用 sudo 的人都可以复制它们并暴力破解您的密码的服务器上。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve