使用一组公钥/私钥对让你不须要密码登陆到远程 Linux 系统或使用 ssh 运行命令,这会很是方便,可是设置过程有点复杂。下面是帮助你的方法和脚本。html
在 Linux 系统上设置一个容许你无需密码便可远程登陆或运行命令的账户并不难,可是要使它正常工做,你还须要掌握一些繁琐的细节。在本文,咱们将完成整个过程,而后给出一个能够帮助处理琐碎细节的脚本。linux
设置好以后,若是但愿在脚本中运行 ssh
命令,尤为是但愿配置自动运行的命令,那么免密访问特别有用。git
须要注意的是,你不须要在两个系统上使用相同的用户账户。实际上,你能够把公用密钥用于系统上的多个账户或多个系统上的不一样账户。github
设置方法以下。算法
首先,你须要从要发出命令的系统上着手。那就是你用来建立 ssh
密钥的系统。你还须要能够访问远程系统上的账户并在其上运行这些命令。安全
为了使角色清晰明了,咱们将场景中的第一个系统称为 “boss”,由于它将发出要在另外一个系统上运行的命令。bash
所以,命令提示符以下:less
boss$
复制代码
若是你尚未在 boss 系统上为你的账户设置公钥/私钥对,请使用以下所示的命令建立一个密钥对。注意,你能够在各类加密算法之间进行选择。(通常使用 RSA 或 DSA。)注意,要在不输入密码的状况下访问系统,你须要在下面的对话框中的两个提示符出不输入密码。dom
若是你已经有一个与此账户关联的公钥/私钥对,请跳过此步骤。ssh
boss$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/myself/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): <== 按下回车键便可
Enter same passphrase again: <== 按下回车键便可
Your identification has been saved in /home/myself/.ssh/id_rsa.
Your public key has been saved in /home/myself/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1zz6pZcMjA1av8iyojqo6NVYgTl1+cc+N43kIwGKOUI myself@boss
The key's randomart image is: +---[RSA 3072]----+ | . .. | | E+ .. . | | .+ .o + o | | ..+.. .o* . | | ... So+*B o | | + ...==B . | | . o . ....++. | |o o . . o..o+ | |=..o.. ..o o. | +----[SHA256]-----+ 复制代码
上面显示的命令将建立公钥和私钥。其中公钥用于加密,私钥用于解密。所以,这些密钥之间的关系是关键的,私有密钥毫不应该被共享。相反,它应该保存在 boss 系统的 .ssh
文件夹中。
注意,在建立时,你的公钥和私钥将会保存在 .ssh
文件夹中。
下一步是将公钥复制到你但愿从 boss 系统免密访问的系统。你可使用 scp
命令来完成此操做,但此时你仍然须要输入密码。在本例中,该系统称为 “target”。
boss$ scp .ssh/id_rsa.pub myacct@target:/home/myaccount
myacct@target's password: 复制代码
你须要安装公钥在 target 系统(将运行命令的系统)上。若是你没有 .ssh
目录(例如,你从未在该系统上使用过 ssh
),运行这样的命令将为你设置一个目录:
target$ ssh localhost date
target$ ls -la .ssh
total 12
drwx------ 2 myacct myacct 4096 Jan 19 11:48 .
drwxr-xr-x 6 myacct myacct 4096 Jan 19 11:49 ..
-rw-r--r-- 1 myacct myacct 222 Jan 19 11:48 known_hosts
复制代码
仍然在目标系统上,你须要将从“boss”系统传输的公钥添加到 .ssh/authorized_keys
文件中。若是该文件已经存在,使用下面的命令将把它添加到文件的末尾;若是文件不存在,则建立该文件并添加密钥。
target$ cat id_rsa.pub >> .ssh/authorized_keys
复制代码
下一步,你须要确保你的 authorized_keys
文件权限为 600。若是还不是,执行命令 chmod 600 .ssh/authorized_keys
。
target$ ls -l authorized_keys
-rw------- 1 myself myself 569 Jan 19 12:10 authorized_keys
复制代码
还要检查目标系统上 .ssh
目录的权限是否设置为 700。若是须要,执行 chmod 700 .ssh
命令修改权限。
target$ ls -ld .ssh
drwx------ 2 myacct myacct 4096 Jan 14 15:54 .ssh
复制代码
此时,你应该可以从 boss 系统远程免密运行命令到目标系统。除非目标系统上的目标用户账户拥有与你试图链接的用户和主机相同的旧公钥,不然这应该能够工做。若是是这样,你应该删除早期的(并冲突的)条目。
使用脚本可使某些工做变得更加容易。可是,在下面的示例脚本中,你会遇到的一个烦人的问题是,在配置免密访问权限以前,你必须屡次输入目标用户的密码。一种选择是将脚本分为两部分——须要在 boss 系统上运行的命令和须要在 target 系统上运行的命令。
这是“一步到位”版本的脚本:
#!/bin/bash
# NOTE: This script requires that you have the password for the remote acct
# in order to set up password-free access using your public key
LOC=`hostname` # the local system from which you want to run commands from
# wo a password
# get target system and account
echo -n "target system> "
read REM
echo -n "target user> "
read user
# create a key pair if no public key exists
if [ ! -f ~/.ssh/id_rsa.pub ]; then
ssh-keygen -t rsa
fi
# ensure a .ssh directory exists in the remote account
echo checking for .ssh directory on remote system
ssh $user@$REM "if [ ! -d /home/$user/.ssh ]; then mkdir /home/$user/.ssh; fi"
# share the public key (using local hostname)
echo copying the public key
scp ~/.ssh/id_rsa.pub $user@$REM:/home/$user/$user-$LOC.pub
# put the public key into the proper location
echo adding key to authorized_keys
ssh $user@$REM "cat /home/$user/$user-$LOC.pub >> /home/$user/.ssh/authorized_ke ys"
# set permissions on authorized_keys and .ssh (might be OK already)
echo setting permissions
ssh $user@$REM "chmod 600 ~/.ssh/authorized_keys"
ssh $user@$REM "chmod 700 ~/.ssh"
# try it out -- should NOT ask for a password
echo testing -- if no password is requested, you are all set
ssh $user@$REM /bin/hostname
复制代码
脚本已经配置为在你每次必须输入密码时告诉你它正在作什么。交互看起来是这样的:
$ ./rem_login_setup
target system> fruitfly
target user> lola
checking for .ssh directory on remote system
lola@fruitfly's password: copying the public key lola@fruitfly's password:
id_rsa.pub 100% 567 219.1KB/s 00:00
adding key to authorized_keys
lola@fruitfly's password: setting permissions lola@fruitfly's password:
testing -- if no password is requested, you are all set
fruitfly
复制代码
在上面的场景以后,你就能够像这样登陆到 lola 的账户:
$ ssh lola@fruitfly
[lola@fruitfly ~]$
复制代码
一旦设置了免密登陆,你就能够不须要键入密码从 boss 系统登陆到 target 系统,而且运行任意的 ssh
命令。以这种免密的方式运行并不意味着你的账户不安全。然而,根据 target 系统的性质,保护你在 boss 系统上的密码可能变得更加剧要。
via: www.networkworld.com/article/351…
做者:Sandra Henry-Stocker 选题:lujun9972 译者:laingke 校对:wxy