当前位置: 首页>>技术教程>>正文


我如何设置password-less SSH登录?

, ,

问题描述

我希望能够通过ssh登录到远程,而不必一直输入密码。

  • 我如何设置它?

  • 执行password-less会话需要不同的命令吗?

最佳解决办法

Answer

执行这个命令:

ssh-keygen

Then you’ll need to copy the new key to your server

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

密钥复制后,正常情况下ssh进入机器:

ssh user@host

您现在可以登录而无需从您执行命令的特定机器输入密码。

例子

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

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

Explanation

假设您已经可以通过SSH成功​​连接到您的服务器。

您将需要生成一个SSH密钥对,该密钥对允许您在不使用密码的情况下将自己识别为自己。如果您愿意,您可以选择使用密码保护密钥,但可以留空,以允许完全password-less SSH访问。

  1. 首先通过运行ssh-keygen创建SSH密钥对,这将创建一个id_rsaid_rsa.pub文件。 pub文件就是服务器上的文件,私钥(id_rsa)就是你的伴侣,并且是你如何识别自己。

  2. 接下来使用ssh-copy-id user@server将公钥替换为远程用户和服务器的机器DN​​S名称或IP地址,将公钥复制到您的服务器。它会提示输入您的SSH密码,输入密码,如果全部成功完成,您将可以通过ssh user@server访问本机而不需要密码。

参考

次佳解决办法

键入以下命令:

  1. ssh-keygenEnter键直到出现提示

  2. ssh-copy-id -i root@ip_address(它会一次询问主机系统的密码)

  3. ssh root@ip_address

现在你应该可以在没有任何密码的情况下登录。

第三种解决办法

我通常使用sshpass,使用sudo apt-get install sshpass进行安装并像这样使用它

sshpass -p 'password' ssh your_username@your_server

第四种办法

我通常这样做的方式如下:

ssh-keygen -t rsa

(当提示输入密码时,请将其留空)

然后:cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(这要求文件夹.ssh位于目标主机名的主目录中,其中包含authorized_keys文件)

当然,用所需的用户名和主机名替换所需的主机名或IP地址

之后,就像您习惯的那样,只需SSH即可访问该框。

第五种办法

Disable Password Authentication

Because a lot of people with SSH servers use weak passwords, many online attackers will look for an SSH server, then start guessing passwords at random. An attacker can try thousands of passwords in an hour, and guess even the strongest password given enough time. The recommended solution is to use SSH keys instead of passwords. To be as hard to guess as a normal SSH key, a password would have to contain 634 random letters and numbers. If you’ll always be able to log in to your computer with an SSH key, you should disable password authentication altogether.

If you disable password authentication, it will only be possible to connect from computers you have specifically approved. This massively improves your security, but makes it impossible for you to connect to your own computer from a friend’s PC without pre-approving the PC, or from your own laptop when you accidentally delete your key.

It’s recommended to disable password authentication unless you have a specific reason not to.

To disable password authentication, look for the following line in your sshd_config file:

#PasswordAuthentication yes 

replace it with a line that looks like this:

PasswordAuthentication no 

Once you have saved the file and restarted your SSH server, you shouldn’t even be asked for a password when you log in.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication

第六种办法

[该解决方案专门针对使用Windows将SSH存入其远程机器的用户,包括AWS Cloud和GCE Cloud上的云图像]

(如果这对你有用,高度赞赏,感谢您的耐心。)

(免责声明)

最近使用此解决方案在GCE上远程登录新部署的vm映像。


使用的工具:

  1. puttygen [puttygen下载]

  2. winscp [winscp下载]


执行步骤:

  1. 使用puttygen生成公钥/私钥对。

  2. 将公钥上传到您的云服务器或远程位置。

说明(如何操作):

1.生成一个密钥/对或使用现有的私钥

(我拥有一个私钥)

打开puttygen,按加载按钮并选择您的私钥(*.pem)文件。


(我没有私钥)

  • 打开puttygen,

  • 在Parameters部分中选择所需的密钥类型SSH2 DSA(您可以使用RSA或DSA)…并且将密码短语字段保留为空是非常重要的,

  • 按下生成并按照说明生成(公/私)密钥对。


(来源1,链接如下)

ssh,authentication,ubuntu

2.创建一个新的’authorized_keys’文件(带记事本)

将公钥数据从PuTTY密钥生成器的“公用密钥粘贴到OpenSSH authorized_keys文件”部分中,并将密钥数据粘贴到”authorized_keys”文件中。


确保此文件中只有一行文本。


3.将密钥上传到Linux服务器

  • 打开WinSCP,

  • 选择SFTP文件协议并使用您的ssh证书登录。

  • 成功时,您会在远程计算机上看到主目录结构。


将authorized_keys文件上传到远程机器的主目录。


4.设置适当的权限

制作.ssh目录(如果不存在)


authorized_keys文件复制到.ssh目录。 (这将取代任何现有的authorized_keys文件,请注意这一点)。

如果文件存在,只需将此文件的内容添加到现有文件。


运行命令来设置权限:

$ sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

现在,您将可以在不输入证书的情况下ssh进入远程机器。

进一步阅读:

  1. https://opengear.zendesk.com/entries/23216142-Generating-and-uploading-SSH-keys-under-Windows

  2. http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt

  3. puttygen download

  4. winscp download

第七种办法

如果您创建公钥/私钥密钥对并使用我们新创建的公钥登录,则不需要输入密码。根据您的key-ring和/或ssh代理的配置,您可能需要使用密码来保护密钥。

这是您的许多short howto之一。对这种方法的安全性至关重要的是,生成的私钥仍然是私有的!你不应该与任何人分享或允许任何人访问它。

该命令在~/.ssh/中生成一个合理的强键:

ssh-keygen -b 4096

~/.ssh/中,您可以找到您的公钥为id_rsa.pub。它的内容应通过传输介质(笔式驱动器)或短时间在服务器上启用密码验证后附加到服务器authorized_keys文件,然后使用ssh-copy-id ~/.ssh/id_rsa.pub username@server然后再次禁用它。

如果您选择使用密码保护您的密钥(在第一步中),则可以使用ssh-agent或Ubuntu密钥环在本地保护该密码,这样您就不必一直键入密码。

第八种办法

远程登录/复制,无需输入密码

用于远程登录和远程复制的应用程序sshscp分别允许您在不提供密码的情况下与远程主机通信。这要求您按照下面描述的身份验证程序进行操作。客户端指的是您所坐的机器,而服务器是指您想要登录的机器,而无需输入密码。认证程序的步骤是:

  1. 运行ssh-keygen以生成私钥和公钥,除非已在您的机器上完成。这些文件存储在$HOME/.ssh的文件中。

  2. 将公钥文件的内容附加到服务器上的文件$HOME/.ssh/authorized_keys$HOME/.ssh/authorized_keys2

有三种不同类型的认证协议。在运行ssh-keygen时指定类型:

  1. SSH协议版本1,RSA1:这是默认选择,并导致文件身份(私钥,应采取chmod 0700以确保此文件对其他人不可读)和identity.pub(公钥)。

  2. SSH协议版本1 RSA:通过运行ssh-keygen -t rsa获得,并生成文件id_rsa(私钥)和id_rsa.pub(公钥)

  3. SSH协议版本1,DSA:通过运行ssh-keygen -t dsa获得,并生成文件id_dsa(私钥)和id_dsa.pub(公钥)

运行ssh-keygen时,您可以依靠默认答案(意味着您不提供密码)。这使得整个set-up变得简单,但也不安全。

您可以指定ssh选项使用的密钥类型; ssh -1强制使用RSA1密钥(协议版本1),而ssh -2强制ssh仅尝试RSA或DSA密钥(协议版本2)。在下面的例子中,我们在远程主机上生成并安装RSA1和DSA密钥,以便您拥有更大的灵活性。您可以使用该行在.ssh目录中创建一个配置文件

Protocol 1,2

这使得ssh在RSA /DSA(协议版本2)之前尝试RSA1(协议版本1)连接。

使用RSA1密钥

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

使用DSA密钥

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

如果您在生成密钥时未使用密码,则只需执行此操作。您可以通过运行ssh $ remote来测试连接,并查看您是否可以在不提供密码的情况下登录(您可能需要使用-1-2作为ssh的选项)。当然,对于任何想要登录的计算机都可以重复该过程。

如果您确实使用密码短语,则必须运行程序ssh-agent以启动一个特殊的shell,随后ssh-add将您的密钥/密码短语组合与sshd一起注册。有关更多信息,请参阅这些程序的手册页。

用于自动化password-free连接的脚本:ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html复制而来

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/178.html,未经允许,请勿转载。