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 / 问题 / 49471
Accepted
morgant
morgant
Asked: 2009-08-04 11:50:14 +0800 CST2009-08-04 11:50:14 +0800 CST 2009-08-04 11:50:14 +0800 CST

如何在 Linux (Fedora 10 & CentOS 5.2) 上允许 SSH 主机密钥

  • 772

我正在尝试将 SSH 主机密钥从基于 Mac OS X 10.5 Leopard Server 的中央备份服务器设置到运行 Fedora 10 和 CentOS 5.2 的两台 Linux 服务器。我们通常采取的过程是有效的,并将密钥放在 ~/.ssh/authorized_keys 中,但它仍然提示输入密码。

我不是这些盒子的常规管理员,我知道默认设置可能是禁用 SSH 主机密钥。如何启用 SSH 主机密钥?

更新:我已经在 /etc/ssh/ssd_config 中取消注释 'PubkeyAuthentication yes' 并运行service restart sshd,但这没有用。取消注释所有三行('RSAAuthentication'、'PubkeyAuthentication' 和 'AuthorizedKeysFile'),更正 ~/.ssh 上的权限并重试。还是没有爱。

当我运行时ssh -v user@host,在提示输入密码之前和一些 GSS 错误之后,我得到以下信息:

debug1: Next authentication method: publickey
debug1: Trying private key: /Users/shortname/.ssh/identity
debug1: Trying private key: /Users/shortname/.ssh/id_rsa
debug1: Trying private key: /Users/shortname/.ssh/id_dsa
debug1: Next authentication method: password

进一步的建议?

另一个更新:~/和的权限~/.ssh/为 700。

我一直在运行以创建主机密钥的命令如下:

cat /blah/ssh_keys_for_shortname/id_dsa.pub | ssh -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld 'cat - >> ~/.ssh/authorized_keys'

在尝试连接时,我使用:

ssh --verbose -l shortname -o stricthostkeychecking=no -i /blah/ssh_keys_for_shortname/id_dsa host.domain.tld

所以,显然我们正在使用 DSA 密钥。我试过重命名~/.ssh/authorized_keys2,但这没有帮助。

我很想将密钥存储在它们的默认位置而不是/blah/ssh_keys_for_shortname/,但这超出了我的控制。

当我观看/var/log/audit/audit.log并尝试连接时,我得到以下信息:

type=CRED_DISP msg=audit(1249426114.642:128): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:setcred acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)'
type=USER_END msg=audit(1249426114.647:129): user pid=10589 uid=0 auid=501 ses=14 msg='op=PAM:session_close acct="shortname" exe="/usr/sbin/sshd" (hostname=host.domain.tld, addr=192.168.1.149, terminal=ssh res=success)'
type=USER_LOGIN msg=audit(1249426129.524:130): user pid=10633 uid=0 auid=4294967295 ses=4294967295 msg='acct="shortname": exe="/usr/sbin/sshd" (hostname=?, addr=192.168.1.149, terminal=sshd res=failed)'

建议?

linux centos ssh fedora hostkey
  • 5 5 个回答
  • 17188 Views

5 个回答

  • Voted
  1. Best Answer
    Insyte
    2009-08-04T14:25:20+08:002009-08-04T14:25:20+08:00

    看起来你的基础知识是正确的。

    我见过的最常见的失败原因是远程authorized_keys文件及其上方目录的权限。在允许基于密钥的身份验证之前,sshd执行权限检查;如果它不喜欢结果,则不允许身份验证。我通常设置~/.ssh为 0700 和~/.ssh/authorized_keys0600。我相信实际的 $HOME 也不能有 group 或 world 写入,尽管读取很好。

    如果仍然不能解决问题,下一步是在服务器端进行一些调试:

    server$ /usr/sbin/sshd -d -p 2222
    

    然后从您的客户端连接到“调试”服务器:

    client$ ssh -v user@host  -p 2222
    

    stderr您将在服务器上获得丰富的调试信息。我还没有遇到我无法从那里找到的身份验证问题。

    • 10
  2. baumgart
    2009-08-04T12:00:42+08:002009-08-04T12:00:42+08:00

    这是我要遵循的过程。

    1. 在 OS X 服务器上创建公钥/私钥对。提示时我没有指定密码。

      $ ssh-keygen -b 4096 -C "myusername@myhostname" -t rsa

    2. 将 OS X 服务器上的 ~/.ssh/id_rsa.pub 的内容复制到 CentOS/Fedora 主机上正确用户主目录中的 ~/ssh/authorized_keys。

    3. 验证所有主机上的权限是否正确。目录 ~/.ssh 应该是 0700 模式,里面的文件应该是 0600(你可以使用 0644 作为公钥,但限制更多也无妨)。

    如果基于密钥的身份验证还没有工作,请确认在每个 CentOS/Fedora 主机上的 sshd_config 文件 (/etc/ssh/sshd_config) 中设置了以下值。(这些值应该是默认值。)

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile     .ssh/authorized_keys
    

    如果它仍然不起作用,请尝试ssh -v user@host查看连接时发生的情况。添加更多 v 以查看有关正在发生的事情的更多详细信息。

    编辑:尝试验证从/到有问题的 .ssh 目录的完整目录树的权限。如果该路径中的任何一个目录是组或全局可写的,那么 SSH 就会崩溃。运行此命令以打印出路径中所有目录的权限:

    j="" ; for i in `echo ~baumgart/.ssh | sed 's%/% %g'` ; do ls -ld $j/$i ; j=$j/$i ; done
    

    另外 - 检查日志文件中来自 CentOS/Fedora 系统上的 sshd 的消息 - 这应该有一个关于问题的有用消息。它应该在 /var/log/messages 或 /var/log/auth.log 中。如果找不到,请执行grep sshd /var/log/*.

    • 4
  3. Ophidian
    2009-08-04T17:54:57+08:002009-08-04T17:54:57+08:00

    如果您已经正确设置了用户/组权限,您可能会遇到 SELinux 问题。解决此问题的最简单方法是使用restorecon -R /home/user/.ssh/. 错误将被登录/var/log/audit/audit.log,您可以使用该audit2why工具让系统解释任何可能发生的 SELinux 拒绝。

    • 2
  4. Bryan Geraghty
    2011-12-14T06:01:33+08:002011-12-14T06:01:33+08:00

    首先要指出的/var/log/audit.log是正在记录SELinux活动。

    我猜如果你再往后看一下那个日志,你会看到另一个看起来像这样的条目:

    type=AVC msg=audit(xxxxxxxxx.xxx:xxxx): avc: denied { search } for pid=xxxxx comm="sshd" name="xxxxxx" dev=xxxx ino=xxxxxx scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:default_t:s0 tclass=dir

    这意味着您的 sshd 进程受到加载的 selinux 策略的限制,并且无法访问授权密钥文件所在的文件系统路径。

    要验证 selinux 策略是否处于活动状态,请运行sestatus命令,您将看到以下输出:

    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 23
    Policy from config file:        targeted
    

    为了快速测试这是否是问题所在,您可以通过发出setenforce permissive命令暂时将 SELinux 设置为许可模式。执行此操作后,再次运行sestatus,您应该会看到以下输出:

    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   permissive
    Mode from config file:          enforcing
    Policy version:                 23
    Policy from config file:        targeted
    

    再次尝试您的 ssh 连接,并且鉴于您的所有其他配置都是正确的,它应该可以工作。

    展望未来,您可能应该创建允许访问您所追求的路径的自定义规则,但这超出了本帮助的范围。

    要使此更改持久化(在重新启动后仍然存在),您需要修改/etc/selinux/config文件并更改:

    SELINUX=enforcing
    

    至

    SELINUX=permissive
    
    • 2
  5. Dom
    2009-08-04T11:59:19+08:002009-08-04T11:59:19+08:00

    /etc/ssh/sshd_config 中的“PubkeyAuthentication yes”?

    • 1

相关问题

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

  • 你最喜欢的 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