一位同事在服务器上工作,并在我们的文档中写下了密码。ssh [email protected]
我刚刚ssh-keygen
在我的计算机上做了这件事,并尝试从我的计算机上执行此操作,但出现了以下错误。ssh -v [email protected]
有谁知道如何修理它?
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to xxx.xxx.xxx.xxx port 22.
debug1: Connection established.
debug1: identity file /Users/softtimur/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4p1 Ubuntu-10
debug1: match: OpenSSH_7.4p1 Ubuntu-10 pat OpenSSH* compat 0x04000000
debug1: Authenticating to xxx.xxx.xxx.xxx:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:Pw4cFx5c2WGJzTwTL+gsx3AMHMEuT0sei1fz5oGCrac
debug1: Host 'xxx.xxx.xxx.xxx' is known and matches the ECDSA host key.
debug1: Found key in /Users/softtimur/.ssh/known_hosts:4
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:EL7hm5LvdVADZiv662nneDEeoLKy+etj8OT61eugu4Y /Users/softtimur/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/softtimur/.ssh/id_dsa
debug1: Trying private key: /Users/softtimur/.ssh/id_ecdsa
debug1: Trying private key: /Users/softtimur/.ssh/id_ed25519
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).
有谁知道如何解决这一问题?
编辑1:
在我的本地 Mac 上,curl ipecho.net/plain ; echo
返回175.169.13.102
。我设法从 Digital Ocean 的 Droplet 中打开了一个控制台A,然后我执行了ssh-keygen
,然后在控制台中,我执行了返回以下内容的操作;没有询问密码。ssh-copy-id [email protected]
我仍然无法相信服务器可以将文件写入我的本地 Mac,就好像我的本地 Mac 是服务器一样......
答案1
以下是部署公钥身份验证方法的示例。假设您有服务器A(您要连接的服务器)和乙(客户端;您想要连接的客户端A使用公钥)。
在A,运行以下命令:
ssh-keygen
- 这将生成一个私钥-公钥对,如果不带参数运行,它将在下执行此操作
~/.ssh
。
- 这将生成一个私钥-公钥对,如果不带参数运行,它将在下执行此操作
在A, 跑步:
ssh-copy-id [user@]<Bs-IP-address>
这将复制民众密钥生成者A到乙.它将在名为 的文件中执行此操作
~/.ssh/authorized_keys
。如果由于连接问题或您无法从点连接,则此操作不起作用A到乙,还有另一种(手动)方法。在您的机器中A,转到您的
~/.ssh
目录并找到您的公钥文件。这可能是一个带有.pub
扩展名的文件。打开它并复制内容,然后在乙将其附加/粘贴到您的~/.ssh/authorized_keys
文件中。很重要:此文件必须由用户拥有,组必须是用户的,并且具有权限600
。否则不起作用. 这几乎就是ssh-copy-id
所做的。
从乙,尝试通过 SSH 连接到A。
需要注意以下几点:
- 第 2 点中的命令将仅将公钥部署到您正在连接的远程用户。这意味着,如果您将密钥部署到 的主页
tom
,则用户名为 的用户将jerry
无法使用它。简而言之,部署是针对每个用户的。 - 如果你尝试部署密钥来连接到A使用 时
root
,请确保PermitRootLogin
中的指令具有或 的/etc/ssh/sshd_config
值(最好)。如果设置为,公共方法身份验证将不起作用。yes
prohibit-password
no
- 绝不与任何人共享私钥。
答案2
上述答案(及其作者的评论)存在一些缺陷:它混淆了服务器和客户由于此答案(根据审核成员的判断)与原始答案相差太大,不能被接受为简单的编辑,因此将其完整发布在这里:
部署公钥认证方法的一种可能方法如下:假设你有一个SSH 服务器 A(您要连接的服务器)和SSH 客户端 B(客户端;您要从中连接到服务器的系统A使用公钥认证)。
生成个人公钥/私钥对客户B。
在乙,运行以下命令:
ssh-keygen
- 这将在客户端上生成个人私钥-公钥对乙,如果不带参数运行,键将存储在中
~/.ssh
。
- 这将在客户端上生成个人私钥-公钥对乙,如果不带参数运行,键将存储在中
部署您的公钥在服务器A。
在乙, 跑步:
ssh-copy-id [<user-on-A>@]<A's-IP-address>
- 这将复制您的公钥(由您于乙在步骤 0) 中A. 它将在一个文件中执行此操作A调用
~/.ssh/authorized_keys
。为了验证A在此过程中,您必须提供其他凭证,例如用户名/密码组合。(服务器必须允许此登录方法。)
- 这将复制您的公钥(由您于乙在步骤 0) 中A. 它将在一个文件中执行此操作A调用
如果你无法连接或登录服务器A这样你就可以手动转移你的公钥到服务器A用任何对你有用的方法。在客户B你发现公钥
.pub
在您的目录中可能以结尾的文件中~/.ssh
。内容(一行纯 ASCII 文本)必须附加~/.ssh/authorized_keys
到服务器A。很重要:此文件必须由用户拥有,组必须是用户的,并且具有权限
600
。否则不起作用. 这几乎就是ssh-copy-id
所做的。
从客户B,尝试通过 SSH 连接到服务器A。
需要注意以下几点:
- 事实上,你已经能够部署你的一个公钥到服务器A(也就是说,进入它的
~/.ssh/authorized_keys
文件),足以证明服务器A,您将被允许登录该帐户,只要您证明您知道密钥(继续乙)匹配公钥简而言之:在 SSH 公钥认证期间,您的客户发出挑战,服务器使用以下方式验证签名公钥。 - 如果你尝试部署密钥来连接到A使用 时
root
,请确保PermitRootLogin
中的指令具有或 的/etc/ssh/sshd_config
值(最好)。如果设置为,公共方法身份验证将不起作用。yes
prohibit-password
no
- 不分享私钥和任何人。