在 Linux (Debian Squeeze) 上,我想对某些用户(选定组或除 root 之外的所有用户)禁用使用密码的 SSH 登录。但我不想为他们禁用使用证书登录。
编辑:非常感谢详细的回答!出于某种原因,这在我的服务器上不起作用:
Match User !root
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)
...但可以很容易地替换为
PasswordAuthentication no
Match User root
PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud) 尝试通过 ssh 连接到我控制的计算机时,我收到了熟悉的消息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA …Run Code Online (Sandbox Code Playgroud) 如果我有一个服务器 A,我可以使用我的 ssh 密钥登录,并且我有能力“sudo su - otheruser”,我会丢失密钥转发,因为 env 变量被删除并且套接字只能由我的原始用户读取。有没有一种方法可以通过“sudo su - otheruser”桥接密钥转发,这样我就可以使用转发的密钥(在我的情况下为 git clone 和 rsync )在服务器 B 上做一些事情?
我能想到的唯一方法是将我的密钥添加到其他用户的授权密钥和“ssh otheruser@localhost”,但对于我可能拥有的每个用户和服务器组合来说,这很麻烦。
简而言之:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud) 这是一个关于 Linux、MacOSX 和 FreeBSD 上的 OpenSSH 客户端的问题。
通常,我使用 SSH 密钥登录系统。
有时,我希望我的 SSH 客户端忽略我的 SSH 密钥并使用密码。如果我使用“ssh 主机名”,我的客户端会提示我输入 SSH 密钥的密码,这很烦人。相反,我希望客户端简单地忽略我的 SSH 密钥,这样服务器就会询问我的密码。
我尝试了以下操作,但仍然提示我输入 SSH 密钥的密码。在此之后,系统会提示我输入密码。
ssh -o PreferredAuthentications=password host.example.org
Run Code Online (Sandbox Code Playgroud)
我想在客户端执行此操作,而无需对远程主机进行任何修改。
我想以非交互式方式克隆一个 repo。克隆时,git 要求确认主机的指纹:
The authenticity of host 'bitbucket.org (207.223.240.182)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? no
Run Code Online (Sandbox Code Playgroud)
每次出现这个问题时,我如何强制“是”?我尝试使用yes yes | git clone ...,但它不起作用。
编辑:这是一个解决方案:我可以自动将新主机添加到 known_hosts 吗?(使用 ssh-keyscan 将所有内容添加到 known_hosts)。
只是想快速总结一下它们之间的区别,为什么有两个?
当我ssh -X在 Mac(运行 OS X 10.6.7)上使用连接到我的 Ubuntu (11.04) 框时,我收到以下警告:
警告:不受信任的 X11 转发设置失败:未生成 xauth 密钥数据警告:无 xauth 数据;使用伪造的身份验证数据进行 X11 转发。
我能做些什么来消除这个警告吗?如果没有,我可以安全地忽略它吗?
X11 转发似乎工作正常,但我确实看到了以下消息:
Xlib:显示“localhost:10.0”上缺少扩展“RANDR”。
这与警告有关吗?(我猜不是。如果不是,我将就此提出一个新问题。)
我安装了 Ubuntu 9.10 sshd,我可以使用登录名和密码成功连接到它。我已经配置了一个RSA密钥登录,现在正如预期的那样“服务器拒绝了我们的密钥”。好的,现在我想检查sshd日志以找出问题。我检查过/etc/ssh/sshd_config,它有
SyslogFacility AUTH
LogLevel INFO
Run Code Online (Sandbox Code Playgroud)
好的。我正在看/var/log/auth.log……它是空的 O_O。更改Loglevel为VERBOSE无济于事 -auth.log仍然是空的。任何提示我如何检查sshd日志?
我正在通过 SSH 连接到一台 Linux 机器,并且我正在尝试运行一个重型 bash 脚本来进行文件系统操作。预计它会持续运行数小时,但由于互联网连接问题,我无法让 SSH 会话保持打开状态。
我怀疑使用后台运算符和符号 ( &)运行脚本是否会奏效,因为我尝试过,后来发现该过程未完成。如何注销并保持进程运行?
我刚刚尝试使用 SSH(PuTTY、Windows)登录Fedora(第 13 版 Goddard)服务器。出于某种原因,Enter输入我的用户名后没有通过,我输入了密码并再次按 Enter 键。当服务员热情地迎接我时,我才意识到我的错误
myusername MYPASSWORD @server.example.com 的密码:
此时我断开了连接并更改了该机器上的密码(通过单独的 SSH 连接)。
...现在我的问题是:这种失败的登录是否以纯文本形式存储在任何日志文件中?换句话说,我是否只是在远程管理员下次扫描他的日志时将我的(现在已经过时的)密码强加给他?
更新
感谢您对隐含问题“将来如何防止这种情况发生”的所有评论。为了快速、一次性的连接,我现在将使用这个 PuTTY 功能:

替换原来的“自动登录用户名”选项

我还将开始更频繁地使用 ssh 密钥,如PuTTY 文档中所述。