我正在尝试获取一个既能使用私钥又能使用私钥 + 密码的用户帐户。密码实际上只需要足够长以应对基于机会的攻击,因为我希望在我的 Android 手机上使用这种身份验证。
但是在我的家用电脑上,我认为没有必要启用密码验证。因此,我想使用类似于 sshpass 的东西,它可以存储密码。当我尝试设置它时,我收到以下错误消息,大概是来自私钥验证:
Authenticated with partial success.
然后我还是会被要求输入密码。
我在 SSHd -config 中使用的内容:
Match User x
AuthenticationMethods "publickey,password" "publickey,keyboard-interactive
当然,我知道我可以为私钥设置一个密码,但我认为,虽然它目前不受保护,但我可能希望在将来使用更强的密码或其他方法来保护它,而不是基于机会的恶意使用。
答案1
正如所述ssh_config(5)
,AuthenticationMethods
:
例如,“
publickey,password publickey,keyboard-interactive
”将要求用户完成公钥身份验证,然后进行密码或键盘交互身份验证。每个阶段仅提供一个或多个列表中的下一个方法,因此对于此示例,在公钥之前无法尝试密码或键盘交互身份验证。
您要么在公钥认证之后要求密码认证,要么不要求。您不能同时满足相同的条件,因为publickey,password publickey
始终只允许使用公钥进行认证,等于publickey
。
如果你没有另一个匹配标准而不是用户名。
的参数
Match
是一个或多个标准模式对或单个标记全部匹配所有条件。可用条件为User
、Group
、Host
、LocalAddress
、LocalPort
和Address
。匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用 ssh_config(5) 的 PATTERNS 部分中描述的通配符和否定运算符。标准中的模式
Address
可能还包含要以 CIDR 地址/掩码长度格式匹配的地址,例如192.0.2.0/24
或2001:db8::/32
。请注意,提供的掩码长度必须与地址一致 - 指定的掩码长度对于地址来说太长或在地址的此主机部分中设置了位是错误的。
如果您在家中有静态 IP 或在工作时有静态 IP 块,则可以将其用作另一个标准。最佳做法是在不受信任的网络上使用更严格的身份验证方法。
以下是在四种不同条件下使用三种不同身份验证方法组合的示例。(John 和 Jane 是属于组的用户employee
。)
# Static IP address, John at home
Match User john Address 198.51.100.78
AuthenticationMethods publickey
# Static IP address, Jane at home
Match User jane Address 192.0.2.90
AuthenticationMethods publickey
# Require also password for all employees on company network 203.0.113.0/24
Match Group employee Address 203.0.113.0/24
AuthenticationMethods publickey,password
# Require public key and Google Authenticator for employees anywhere else
Match Group employee
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
这Google 身份验证器在最后一个例子中需要 在行libpam-google-authenticator
中安装和配置。/etc/pam.d/sshd
auth required pam_google_authenticator.so
单个用户的另一种方法无法访问sshd_config
,假设 正在使用publickey
无需password
身份验证的身份验证:在家庭计算机上使用相同的密钥,无需密码,在工作时使用密码。根据原始密钥的情况:
- 使用以下方式删除密码
openssl rsa -in work-encrypted.key -out open-home.key
- 添加密码
openssl rsa -des3 -in open-home.key -out work-encrypted.key