ssh 创建信任关系后,仍须要输入密码

今天在使用git服务时,须要git clone 一个项目,结果须要我输入密码,可是我已经将公钥放置在该git服务器上,而后我就找另一台电脑测试该问题,linux

首先将经过ssh 使用密码登录另一台电脑,而后将个人公钥放置在该电脑文件中,退出该电脑的登录,再次登录该电脑,预想是能够直接不输入密码登录,结果仍须要输入密码才能登录,git

解决办法:算法

ssh-add ~/.ssh/id_dsa

来自: http://man.linuxde.net/ssh-add
 第一种方法. ssh-add ~/.ssh/id_rsa          我是经过该方法解决问题的。

其余解决办法:
安全

1 查看 log/secure,分析问题在何处;检查/var/log/messages

2  查看 /root/.ssh/authorized_keys文件的属性,以及.ssh文件属性   是否是权限过大。.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:

3  修改/etc/ssh/sshd_config文件,  把密码认证关闭, 将认证改成 passwordAuthentication no   重启下sshd。 service sshd restart;

4  执行setenforce 0,暂时关闭selinux


bash

查看selinux状态服务器



1  /usr/sbin/sestatus -v      ##若是SELinux status参数为enabled即为开启状态


    SELinux status:                 enabledssh

2   getenforce                 ##能够用这个命令检查ide

关闭selinux: 测试



1  临时关闭(不用重启机器):


   setenforce 0                  ##设置SELinux 成为permissive模式ui

                                 ##setenforce 1 设置SELinux 成为enforcing模式

2  配置文件修改须要重启机器:

   修改/etc/selinux/config 文件

   将SELINUX=enforcing改成SELINUX=disabled

   重启机器便可


附录:
ssh信任关系创建方法

1 在服务器上,进入当前用户根目录下的隐藏目录 .ssh 命令

cd  ~/.ssh

经过 ls –a 命令观察到

2 生成S服务器的私钥和公钥

ssh-keygen -t rsa

ssh-keygen生成密钥用于信任关系生成

-此时会显示Generating public/private key pair. 并提示生成的公钥私钥文件的存放路径和文件名,默认是放在 /home/username/.ssh/id_rsa 这样的文件里的,一般不用改,回车
而后Enter passphrase(empty for no passphrase): 一般直接回车
Enter same passphrase again: 也直接回车
而后会显式密钥fingerprint生成好的提示,并给出一个RSA加密协议的方框图形。此时在.ssh目录下ls,能够看到生成好的私钥文件id_rsa和公钥文件id_rsa.pub


如下是各类补充说明:

注1:若是此时提示 id_rsaalready exists,Overwrite(y/n) 则说明以前已经有人建好了密钥,此时选择n 忽略本次操做就行,能够直接用以前生成好的文件;固然选y覆盖一下也无妨

注2:公钥用于加密,它是向全部人公开的(pub是公开的单词public的缩写);私钥用于解密,只有密文的接收者持有


3 在Server服务器上加载私钥文件

仍然在.ssh目录下,执行命令:
ssh-add id_rsa
系统若是提示:Identity added: id_rsa (id_rsa) 就代表加载成功了
下面有几个异常状况处理:
–若是系统提示:could not open a connection to your authentication agent
则须要执行一下命令:
ssh-agent bash
而后再执行上述的ssh-add id_rsa命令
–若是系统提示id_rsa: No such file or directory
-这是系统没法找到私钥文件id_rsa,须要看看当前路径是否是不在.ssh目录,或者私钥文件改了名字,例如若是创建的时候改为 aa_rsa,则这边命令中也须要相应改一下
-若是系统提示 command not found,那确定是你命令敲错字符了
-提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add
-注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下


4 把公钥拷贝至Client服务器上

很简单,例如 
scp id_rsa.pub user@10.11.xx.xx:~

5 ssh登陆到Client服务器上,而后在Client服务器上,把公钥的内容追加到authorized_keys文件末尾(这个文件也在隐藏文件夹.ssh下,没有的话能够创建,没有关系)

cat id_rsa.pub >> ~/.ssh/authorized_keys

如下是各类补充说明,遇到问题时能够参考

注1:这里不推荐用文件覆盖的方式,有些教程直接scp id_rsa.pub 到Client服务器的authorized_keys文件,会致使以前建的其余信任关系的数据被破坏,追加到末尾是更稳妥的方式
注2: cat 完之后,Client服务器上刚才拷贝过来的id_rsa.pub文件就不须要了,能够删除或移动到其它地方)
注3:ssh-keygen 命令经过-b参数能够指定生成的密钥文件的长度,若是不指定则默认为1024,若是ssh-keygen –b 4096(最长4096),则加密程度提升,可是生成和验证时间会增长。对通常的应用来讲,默认长度已经足够胜任了。若是是rsa加密方式,那么最短长度为768 byte
注4:authorized_keys文件的权限问题。若是按上述步骤创建关系后,仍然要验证密码,而且没有其余报错,那么须要检查一下authorized_keys文件的权限,须要做下修改: chmod g-w authorized_keys
OK,如今试试在Server端拷贝一个文件到Client服务器,应该无需交互直接就传过去了。
可是此时从Client传数据到Server服务器,仍然是须要密码验证的。若是须要两台服务器间能直接互传数据,则反过来按上述步骤操做一下就能够了


异常状况处理:
–提示 port 22: Connection refused

可能的缘由:没有正确安装最新的openssh-server,安装方法以下
sudo apt-get install openssh-server
不支持apt安装的,能够手工下载:
wget http://ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz
–关于目录和文件的权限设置
.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:
chmod 600 id_rsa
不然ssh服务器会拒绝登陆


关于ssh_config_sshd_config配置文件:

/etc/ssh/ssh_config:
Host *
选项“Host”只对可以匹配后面字串的计算机有效。“*”表示全部的计算机。
ForwardAgent no
“ForwardAgent”设置链接是否通过验证代理(若是存在)转发给远程计算机。
ForwardX11 no
“ForwardX11”设置X11链接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否使用口令验证。
FallBackToRsh no
“FallBackToRsh”设置若是用ssh链接出现错误是否自动使用rsh。
UseRsh no
“UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no
“BatchMode”若是设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes
“CheckHostIP”设置ssh是否查看链接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”若是设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,而且一旦计算机的密匙发生了变化,就拒绝链接。
IdentityFile ~/.ssh/identity
“IdentityFile”设置从哪一个文件读取用户的RSA安全验证标识。
Port 22
“Port”设置链接到远程主机的端口。
Cipher blowfish
“Cipher”设置加密用的密码。
EscapeChar ~
“EscapeChar”设置escape字符。


/etc/ssh/sshd_config:

Port 22
“Port”设置sshd监听的端口号。
ListenAddress 192.168.1.1
“ListenAddress”设置sshd服务器绑定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。
LoginGraceTime 600
“LoginGraceTime”设置若是用户不能成功登陆,在切断链接以前服务器须要等待的时间(以秒为单位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒以后自动从新生成服务器的密匙(若是使用密匙)。从新生成密匙是为了防止用盗用的密匙解密被截获的信息。
PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登陆。这个选项必定不要设成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”设置ssh在接收登陆请求以前是否检查用户家目录和rhosts文件的权限和全部权。这一般是必要的,由于新手常常会把本身的目录和文件设成任何人都有写权限。
X11Forwarding no
“X11Forwarding”设置是否容许X11转发。
PrintMotd yes
“PrintMotd”设置sshd是否在用户登陆的时候显示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。
LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。
RhostsRSAAuthentication no
“RhostsRSA”设置是否容许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否容许只有RSA安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否容许口令验证。
PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否容许用口令为空的账号登陆。
AllowUsers admin
“AllowUsers”的后面能够跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名能够是DNS名或IP地址。
ssh-add ~/.ssh/id_dsa

来自: http://man.linuxde.net/ssh-add