如何在没有密码的情况下SSH到localhost?


17

编辑:准确地做了什么。

我需要localhost没有密码的SSH才能正常使用(使用公共密钥)。

user@PC:~$ rm -rf .ssh/*
user@PC:~$ ssh-keygen -t rsa > /dev/null 
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
user@PC:~$ ls .ssh/
id_rsa  id_rsa.pub
user@PC:~$ ssh-copy-id -i localhost 
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is f7:87:b5:4e:31:a1:72:11:8e:5f:d2:61:bd:b3:40:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh-agent $SHELL
user@PC:~$ ssh-add -L
The agent has no identities.
user@PC:~$ ssh-add 
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
user@PC:~$ ssh-add -L
ssh-rsa ...MY KEY HERE

user@PC:~$ ssh-copy-id -i localhost 
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh localhost echo 'testing'
user@localhost's password: 

user@PC:~$ 

因此,如您在最后一个命令中看到的,它仍然在询问密码!我该如何解决?Ubuntu-10.04,OpenSSH_5.3p1

编辑2:

添加有关sshd的一些信息

user@PC:~$ cat /etc/ssh/sshd_config | grep Authentication
# Authentication:
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
ChallengeResponseAuthentication no
# PasswordAuthentication yes
#KerberosAuthentication no
#GSSAPIAuthentication no
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.

EDIT3:$ ssh -vv localhost的广告结果

$ssh -vv localhost
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/identity
debug1: Offering public key: /home/user/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
user@localhost's password: 

编辑4:

只是检查文件是否相同并且md5sum同意


在/ etc / ssh / sshd_config中是否有RSAAuthentication yesPubkeyAuthentication yes?ssh -vv localhost显示什么?我只是在10.04盒子上试过了,没有问题..
Doon

Hy Doon,的确..我俩都同意。.我在问题中添加了ssh -vv的输出。
Canesin

如果已经具有访问权限,为什么需要ssh到localhost?
vtest 2011年

并行处理软件使用本地ssh / rsh
Canesin 2011年

请不要在问题中张贴答案,也不要在标题中加上“已解决”。通过提供答案,您做对了事情。接受答案后,系统将显示问题已解决。
ChrisF 2011年

Answers:


10

首先,您应该了解自己在做什么:

user@PC:~$ cat .ssh/id_rsa.pub | ssh localhost 'cat >> .ssh/authorized_keys'

您正在.ssh/id_rsa.pub通过ssh 将公钥复制到同一主机(即localhost是同一主机)。如果替换localhost为其他主机,那会更有意义(但是,如果为了学习如何进行尝试而已,那没关系)。

在远程主机(或所在主机)上拥有公钥的副本后,必须确保在实际主机中使用它进行身份验证,并调用ssh-agent/ ssh-add

$ eval `ssh-agent`
$ ssh-add

然后,如果您提供了密码,将要求您在后面输入密码ssh-add。如果您生成没有密码短语的私钥,就是这样。


是的,我了解这些命令,我​​只是采用了这种方式来明确说明我是使用键来完成通常的工作。我做了ssh-add…它不询问密码(因为我在创建中没有使用过密码)..但再次,$ ssh localhost ls,它要求输入密码
Canesin 2011年

因此,如果您执行了ssh-add,请编辑您的问题,然后将您所做的所有事情都放入。您提供的信息越多,答案越好,越快。
Torian

很抱歉的是,现在固定的。我添加末端,又都没有在这里贴..
Canesin

谢谢百万次!顺便说一句,为什么“ eval”?
IProblemFactory

3

发现了问题。

通过调试运行服务器:

$sshd -Dd

我发现它无法读取auth_key

$chmod 750 $HOME

固定它。


以前的文件标志是什么?
bbaja42 2011年

2

执行以下步骤

ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.

使用默认文件并清空密码(在接下来的2个步骤中只需按Enter)

# start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Agent pid 59566
ssh-add 

将〜/ .ssh / id_rsa.pub的内容复制到〜/ .ssh / authorized_keys

确保以下是权限

 ls -l .ssh/
 total 20
-rw-r--r--. 1 swati swati  399 May  5 14:53 authorized_keys
-rw-r--r--. 1 swati swati  761 Jan 12 15:59 config
-rw-------. 1 swati swati 1671 Jan 12 15:44 id_rsa
-rw-r--r--. 1 swati swati  399 Jan 12 15:44 id_rsa.pub
-rw-r--r--. 1 swati swati  410 Jan 12 15:46 known_hosts 

另外,请确保.ssh目录的权限是。这也很重要

drwx------.   2 swati swati    4096 May  5 14:56 .ssh

1
确保$ HOME上有750个权限
swatisinghi 2015年

在我的机器(Fedora的28)的设置权限authorized_keys为0600可以解决问题,而许可.ssh目录对ssh方式连接本地主机没有任何影响
张骞

1

简化服务器配置

我认为您可能需要禁用基于密码的身份验证。这是我使用的sshd_config

Port 22
Protocol 2
PermitRootLogin no
StrictModes yes
PasswordAuthentication no
ChallengeResponseAuthentication no
MaxStartups 2
AllowUsers peter paul mary
LogLevel VERBOSE

首先尝试最少的操作,然后在需要其他功能时添加到其中。


更新:

检查服务器日志

从您的EDIT3中,我看到在客户端尝试基于密码的身份验证之前,公钥身份验证失败。您服务器的系统日志可能包含来自sshd的某些消息,从而对此有所了解。

重新加载更改的配置

记住要发出信号sshd以重新加载任何配置更改。例如kill -HUP $(cat /etc/sshd.pid)


我认为当他甚至没有密码也无法进入时禁用密码认证将是他想要做的最后一件事(将自己完全锁定)
Amalgovinus 2014年

@Amalgovinus:自从我发布最初的答案以来,该问题已被广泛编辑。我想我可以删除这个答案。
RedGrittyBrick

0

关于上面的帖子,虽然面临相同的问题,但我只是更改了一行

密码验证否

在/ etc / ssh / sshd_config文件中,它可以工作。

而且,也许更好用

服务sshd重新启动

重新加载sshd配置更改。




0

我遇到了同样的问题,我按照以下3个步骤创建了无需登录的密码,效果很好

1. ssh-keygen -t rsa
Press enter for each line
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod og-wx ~/.ssh/authorized_keys
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.