我有一个 VPS,安装了 cmake 和 Hiawatha,没有任何问题。在浏览器中查看时,ip 地址会显示一个网页,因此运行正常。
我的文档根目录将从 assembla.com 上的 git 存储库加载。
我以 VPS 根用户身份远程运行控制台。让我展示一下我如何尝试执行此操作。
步骤1:
[root@server /]$ cd .\
[root@server ~]$ cd .ssh/id_rsa
然后我移除所有的键,因为我已经弄乱了它们并且失败了,我将重新开始清理。
[root@server id_rsa]$ rm -f *
[root@server id_rsa]$ dir ->(and nothing comes up)
[root@server id_rsa]$ ssh-keygen -t rsa -f mykey
[root@server id_rsa]$ dir ->(mykey mykey.pub)
假设我将密码设为 dog1234,并在每次提示时输入一次。
[root@server id_rsa]$ cd ../
[root@server .ssh]$ chmod 600 -R id_rsa
现在检查一下 ssh-agents 正在运行什么...
[root@server .ssh]$ ps aux | grep ssh
输出是...
root 29700 0.0 0.0 57704 764 ? Ss 00:32 0:00 ssh-agent
root 29718 0.0 0.0 57704 724 ? Ss 00:38 0:00 ssh-agent
root 29782 0.0 0.0 57704 768 ? Ss 01:32 0:00 ssh-agent -s
root 29884 0.0 0.0 57704 752 ? Ss 02:03 0:00 ssh-agent -s
root 29893 0.0 0.0 103248 844 pts/0 S+ 02:17 0:00 grep ssh
最后一个是我运行来检查这些命令的命令。为了保持干净启动,我杀死了每一个 PID...
[root@server .ssh]$ kill 29700
[root@server .ssh]$ kill 29718
[root@server .ssh]$ kill 29782
[root@server .ssh]$ kill 29884
为了验证它是否杀死了他们……
[root@server .ssh]$ ps aux | grep ssh
再次输出...
root 29899 0.0 0.0 103248 848 pts/0 S+ 02:22 0:00 grep ssh
这是 grep 命令本身。如果我尝试杀死 29899,它会说它不存在,这是正确的,因为该命令已经执行完毕,而且它不是 ssh 代理。
现在,事情很可能就是从这里开始变糟的。首先,我想指出,这个终端在 CentOS 上的行为与我习惯的 ubuntu 不同。出于某种原因,任何带有需要回答是或否的问题的命令都会导致终端命令的当前进程中断并停止。
例如当我之前执行以下命令时:
ssh-keygen -t rsa -f mykey
我添加了 -f mykey 来命名文件。如果我等待提示输入名称,则会失败。有人知道为什么会这样吗?是因为我远程连接到服务器吗?这可能是我的密码(我即将使用的密码)不起作用的原因吗?
现在我启动 ssh-agent,因为我已经把它们全部杀死了。
[root@server .ssh]$ eval `ssh-agent`
输出...
Agent pid 29910
然后...
[root@server .ssh]$ cd id_rsa
[root@server id_rsa]$ ssh-add -l
输出...
The agent has no identities.
现在我需要添加它们。
[root@server id_rsa]$ ssh-add mykey.pub
这是我不明白发生了什么事的地方。
[root@server id_rsa]# ssh-add mykey.pub
Enter passphrase for mykey.pub:
Bad passphrase, try again for mykey.pub:
Bad passphrase, try again for mykey.pub:
Bad passphrase, try again for mykey.pub:
Bad passphrase, try again for mykey.pub:
Bad passphrase, try again for mykey.pub:
Bad passphrase, try again for mykey.pub:
我输入 dog1234 作为密码,并且这似乎会无限期地持续下去。
配置文件...
vim /etc/ssh/sshd_config
#KeyRegenerationInterval 1h
#ServerKeyBits 1024
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM yes
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none
# no default banner path
#Banner none
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
最后,我在 .ssh 目录中没有 authorized_keys 文件夹。我在其他问题中找到的所有东西似乎都不起作用。
为什么我无法添加身份?
答案1
看起来你可能倒退了。
ssh-add
向您在终端中输入的框上的身份验证代理添加一个身份,即您的私钥。 ssh
稍后将使用它来对远程主机进行身份验证。但是,通常您不需要这样做,只需将文件复制id_rsa
到适当位置~/.ssh/
(并设置其模式chmod 400
)。此文件通常是加密的(明智的选择),但在这种情况下它不是私钥,因此您当然无法解密它。
以 结尾的文件.pub
是您的公钥。您可以将其提供给远程 GIT 主机或您要验证的其他任何主机。您无需将此值保密;您可以将其与您验证的所有人共享。它们与私钥具有 1:1 的对应关系。
当您将-f
选项指定为时ssh-keygen
,它不会触及id_rsa
。您必须自己放置生成的私钥。您还可以指定一个选项(我相信它是-i
用于身份文件)以ssh
在身份验证时指定备用身份(您刚刚创建的身份)。但是,由于我确信您的 Web 服务正在使用其自己的服务帐户运行,因此不这样做而只使用默认路径 应该是完全没问题的~/.ssh/id_rsa
。
我不认为~/.ssh/id_rsa
它应该是一个目录。根据我的经验,它是一个包含一个私钥的文件。
答案2
您正在非标准目录 ~/.ssh/id_rsa 中生成密钥 mykey,这无助于人们理解您的问题。
当您需要添加私有 mykey 文件时,您似乎还试图将公共 mykey.pub 文件添加到 ssh-agent。man 1 ssh 代理指。
ssh-agent 是一个用于保存用于公钥认证(RSA、DSA)的私钥的程序
还请注意手册页的下一部分
这个想法是,ssh-agent 在 X-session 或登录会话开始时启动,并且所有其他窗口或程序都作为 ssh-agent 程序的客户端启动。
清理你已经完成的操作,删除 ~/.ssh/id_rsa 及其内容,然后终止所有 ssh-agent 进程,如果 ~/.ssh 中还有其他密钥,则暂时删除它们,然后尝试此操作
$ cd ~/.ssh $ ssh-keygen -t rsa -f mykey 生成公钥/私钥 rsa 密钥对。输入密码(空表示无密码):dog1234 再次输入相同密码:dog1234 您的身份信息已保存在 mykey 中。您的公钥已保存在 mykey.pub 中。...
现在您有一个公钥 mykey.pub 和一个私钥 mykey。将公钥复制到您需要的任何位置,我将 remote_host 放在了 ~/.ssh/authorized_keys 中,其中已正确设置了权限。
测试新生成的密钥
ssh user@remote_host -i ~/.ssh/mykey
Enter passphrase for key '/home/user/.ssh/mykey':dog1234
Last login: Tue Dec 10 09:04:56 2013 from 2001:470:1f09:6e5:225:dead:beef:9c04
$ exit
很好,密钥按预期工作,让我们整理一下 ssh-agent。记住手册页上说的
这个想法是,ssh-agent 在 X-session 或登录会话开始时启动,并且所有其他窗口或程序都作为 ssh-agent 程序的客户端启动。
为了测试 ssh-agent,让我们运行一个可以访问 ssh-agent 的 bash shell
$ ssh-agent bash
$ ssh-add -l
The agent has no identities.
$ssh user@remote_host
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
请注意,上述操作失败,因为我们没有使用 -i mykey 向 ssh 提供密钥文件,并且我们尚未向 ssh-agent 添加密钥。
ssh-add ~/.ssh/mykey
Enter passphrase for /home/user/.ssh/mykey:dog1234
Identity added: /home/user/.ssh/mykey (/home/user/.ssh/mykey)
测试一下
ssh user@remote_host 上次登录:2013 年 12 月 10 日星期二 09:18:00 来自 2001:470:1f09:6e5:225:dead:beef:9c04
太棒了!一切按预期进行,因为 ssh 从代理处获得了密钥。