我的 .ssh/config 文件中目前有这个:
Host *
AskPassGUI no
IdentityFile ~/.ssh/%r@%h
IdentityFile ~/.ssh/%h
IdentityFile ~/.ssh/id_dsa
当我 ssh 进入没有密钥文件的主机时,登录可以成功,但也会收到以下错误:
no such identity: /Users/user/.ssh/[email protected]: No such file or directory
no such identity: /Users/user/.ssh/example.com: No such file or directory
理想情况下,我希望 ssh 检查文件,但如果找不到任何文件,则不会抛出错误。这个想法是能够将名为“[电子邮件保护]Host
“或”example.com“到我的.ssh目录中,并让ssh在使用该用户/主机组合登录时使用这些文件,但如果文件丢失则不抱怨然后正常登录。我不想使用这个答案,因为我有很多关键文件,我不想将它们添加到文件夹中,然后编辑配置文件并为每个文件添加主机指令。
这种事可能吗?
答案1
查看了openssh的源代码后,似乎答案如下:
OpenSSH 将 ~/.ssh/config 中的 IdentityFile 行视为“用户提供的”。如果找不到用户提供的 IdentityFile,它会向控制台记录警告。请参阅 sshconnect2.c 中的“load_identity_file”函数。
不幸的是,这是不可能的确切地我希望它能做什么,但存在一些解决方法:
一种方法是将以下行添加LogLevel ERROR
到 ~/.ssh/config 文件中。这比默认日志级别低一级INFO
。我没有选择这个,因为我不确定它会抑制哪些其他警告。
我选择的选项是将以下行添加到我的 /etc/ssh_config 文件中:
Host *
IdentityFile ~/.ssh/%r@%h
IdentityFile ~/.ssh/%h
# The lines below maintain ssh's default behavior:
IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
然后我IdentityFile
从我的 ~/.ssh/config 文件中删除了这些行。
当这些行位于 /etc/ssh_config 中时,它们不被视为“用户提供的”,因此当找不到该文件时,不会记录任何内容。