双方PreferredAuthentications=password并PreferredAuthentications=keyboard-interactive会提示输入密码,有啥它们之间的区别?
我谷歌搜索关键字ssh PreferredAuthentications password keyboard-interactive difference但没有找到答案。
我注意到的唯一区别是提示字符串(user@host's password:vs. Password:):
$ ssh -o PreferredAuthentications=password,keyboard-interactive my-host
root@my-host's password:
Password:
Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).
Run Code Online (Sandbox Code Playgroud)
为便于参考,以下内容来自jouell 的回答中提到的SSH:TDG 一书。
"keyboard-interactive"用户身份验证主要用于PAM在服务器端进行身份验证。它提供与用户的多重质询-响应对话,其中服务器向用户发送文本查询,用户输入响应,并且该过程可以重复任意次数。因此,例如,您可以PAM为 SSH配置一个模块,该模块使用RSA 安全令牌或一次性密码方案执行身份验证。人们对此感到困惑,因为默认情况下,"keyboard-interactive"身份验证通常只是在单个质询-响应周期中实现密码身份验证,只是提示输入密码,因此看起来与"password"验证。如果您不是为了不同的目的故意使用这两者,您可能希望禁用其中一个以避免最终用户混淆。
我一直在解决一个PubkeyAuthentication问题。当我使用详细模式时,我看到很多"key_load_public: no such file or directory"。
显然,这些键存在于文件系统上,因此该消息似乎没有通常的含义:
$ ls -al ~/.ssh/id_*
-rw------- 1 jwalton staff 751 Feb 4 2013 id_dsa
-rw------- 1 jwalton staff 608 Feb 18 2015 id_dsa.pub
-rw------- 1 jwalton staff 314 Feb 4 2013 id_ecdsa
-rw------- 1 jwalton staff 180 Feb 18 2015 id_ecdsa.pub
-rw------- 1 jwalton staff 464 Aug 23 18:15 id_ed25519
-rw------- 1 jwalton staff 103 Aug 23 18:15 id_ed25519.pub
-rw------- 1 jwalton staff 2546 Feb 4 2013 id_rsa
-rw------- 1 …Run Code Online (Sandbox Code Playgroud) 在此页面上,给出的解释是:
选项 PasswordAuthentication 指定我们是否应该使用基于密码的身份验证。为了增强安全性,此选项必须始终设置为 yes。
但它没有提供任何用例场景来阐明什么时候是或否是合适的。有人可以进一步详细说明吗?
我经常 ssh 进入一台双启动 OS X / Linux 计算机。两个 OS 实例不共享相同的主机密钥,因此可以将它们视为共享相同 IP 和 DNS 的两个主机。假设 IP 是192.168.0.9,名称是hostname和hostname.domainname
据我了解,能够连接到两个主机的解决方案是将它们都添加到~/.ssh/know_hosts文件中。然而,说起来容易做起来难,因为文件是散列的,并且每个主机可能有几个条目 ( 192.168.0.9, hostname, hostname.domainname)。因此,我有以下警告
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来编辑known_hosts文件,同时保留散列。例如,如何找到与给定主机对应的行?如何为某些已知主机生成哈希?
理想的解决方案将允许我使用ssh连接无缝到这台计算机,无论是否我把它192.168.0.9,hostname或者hostname.domainname,也如果它使用它的Linux hostkey或其OSX hostkey。但是,如果存在真正的中间人攻击,即是否使用了除这两个之外的其他密钥,我仍然希望收到警告。
我有以下内容ssh_config可以连接到本地 LAN 上的机器和 VM 中的机器:
Host 172.16.*.*
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)
但是,每次我连接它都会产生警告:
$ ssh jdoe@172.16.4.11
Warning: Permanently added '172.16.4.11' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/jdoe/.ssh/id_ed25519':
Run Code Online (Sandbox Code Playgroud)
我正在使用 OpenSSH 7.1。如何在本地 LAN 的每个连接上禁用警告?
我在任何地方都找不到,所以我想知道我是不是唯一一个遇到此类问题的人。
默认情况下,Red Hat 和 Debian 上的 ssh 至少有一个 ssh_config 和 SendEnv 选项,用于在远程会话中传递 LC* 和 LANG 变量。如果不是 root 来更改 /etc/ssh/ssh_config,他如何禁用该行为?SendEnv 选项似乎正在累积,我看不到任何重置它的方法。
为了避免被问到,我需要避免将我的语言环境传递给测试机器,以避免对依赖语言环境作为机器默认设置的脚本和程序产生副作用。
在我的 Ubuntu 机器上,我只是使用 Keychain 来维护一个保持登录状态的 ssh-agent。
我想要类似于 Windows 上的东西,因为 OpenSSH 是本机包含的。我正在使用带有众所周知的if [ -z "$SSH_AUTH_SOCK" ] ; then ...脚本的Git Bash,但这导致许多 ssh 代理被打开,我知道有人建议不要这样做(部分原因是这篇博文:http : //rabexc.org/posts/pitfalls-of-ssh -agents ) - 这就是让我获得 Ubuntu 钥匙串的原因。不再使用它的另一个原因是我正在将 PowerShell 作为我的主要 shell。
但我不确定如何在 Windows 上专门使用 PowerShell和Win32-OpenSSH实现同样的事情。
谢谢!
当我尝试使用 连接到我的 EC2(Ubuntu 14.04.3)服务器时ssh -v server,我在日志末尾看到了这一点:
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to <domain>.com ([192.168.1.42]:12345).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com # <!-!-!-!-!-!- What's this?
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_CTYPE = en_US.UTF-8
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-55-generic x86_64)
Run Code Online (Sandbox Code Playgroud)
这是我的.ssh/config:
Host server
HostName domain.com
User myuser
IdentityFile ~/path/to/EC2Key.pem
Port <portnumber>
Run Code Online (Sandbox Code Playgroud)
这似乎很正常。我可以在这里看到两个可能的原因:
openssh.com …我最近进行了设置,openssh所以我可以将它与git.
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>
Run Code Online (Sandbox Code Playgroud)
一段时间后,在我注销并重新登录后,我尝试使用时git push出现错误。此错误的解决方案是再次运行相同的命令。
ssh-agent运行,这样我就不必开始新的了澄清一下,我使用 zsh,因此某些 bash 功能在我的 .zshrc 中不起作用。
我现在使用公钥/私钥对已经很长时间了。几乎在同一时间,我一遍又一遍地问自己,我应该使用哪个文件扩展名。似乎至少对于公共和私有(openssh)密钥根本没有约定?
我的意思是在 PuTTy 中.ppk,“PuTTy 私钥”有一个特殊的扩展名,公钥存储在没有扩展名的情况下,或者带有.pub. 我个人不喜欢使用.pub,因为微软已经在 MS Publisher 中使用了这个扩展。因此,对于 PuTTy,我使用相同的名称存储两个密钥,并将其添加.ppk到私钥中,而没有添加到公钥中。对于这种情况,我可以接受。我可以确定哪个密钥是公共密钥,哪个是私有密钥,而私有密钥仅用于 PuTTy。
但是我应该如何处理私有的 openssh 密钥?只存储它而不扩展?或者使用类似的东西.openssh?此外,如果真的没有约定,如果有人只是考虑一下并为自己整理出某种概念,我也将不胜感激......
提前致谢!
openssh ×10
ssh ×9
linux ×3
ubuntu ×2
debian ×1
powershell ×1
putty ×1
security ×1
ssh-agent ×1
windows-10 ×1