当前位置: 首页 > 科技观察

使用公钥-私钥对设置免密码Linux登录方式

时间:2023-03-13 23:42:43 科技观察

使用一组公钥/私钥对可以让你免密码登录远程Linux系统或者使用ssh运行命令,这很方便,但设置过程有点复杂。以下是可以帮助您的方法和脚本。在Linux系统上设置一个允许您远程登录或无需密码即可运行命令的帐户并不难,但是您需要掌握一些繁琐的细节才能使其发挥作用。在本文中,我们将逐步完成整个过程,然后提供一个脚本来帮助处理琐碎的细节。设置完成后,如果您想在脚本中运行ssh命令,无密码访问将特别有用,尤其是如果您希望将命令配置为自动运行。请务必注意,您不需要在两个系统上使用相同的用户帐户。事实上,您可以将公钥用于系统上的多个帐户或多个系统上的不同帐户。设置方法如下。它在哪个系统上启动?首先,您需要从要在其上发出命令的系统开始。这是您用来创建ssh密钥的系统。您还需要有权访问远程系统上的帐户并在其上运行这些命令。为了明确角色,我们将场景中的第一个系统称为“老板”,因为它将发出要在另一个系统上运行的命令。因此,命令提示符如下所示:boss$如果您还没有在boss系统上为您的帐户设置公钥/私钥对,请使用如下所示的命令创建一个。请注意,您可以在各种加密算法之间进行选择。(通常使用RSA或DSA。)注意,不输入密码访问系统,需要在下面对话框中的两个提示处不输入密码。如果您已有与此帐户相关联的公钥/私钥对,请跳过此步骤。boss$ssh-keygen-trsaGeneratingpublic/privatersakeypair.Enterfilewhichtosavethekey(/home/myself/.ssh/id_rsa):输入密码(没有密码为空):<==pressbackEnter再次使用相同的密码:<==按回车键您的身份已保存在/home/myself/.ssh/id_rsa中。您的公钥已保存在/home/myself/.ssh/id_rsa.pub中。密钥指纹是:SHA256:1zz6pZcMjA1av8iyojqo6NVYgTl1+cc+N43kIwGKOUImyself@bossThekey'srandomartimageis:+---[RSA3072]----+|...||电子+...||.+.o+o||..+...o*。||...所以+*Bo||+...==乙。||.哦。....++。||哦哦。.o..o+||=..o....oo.|+----[SHA256]-----+上面显示的命令将创建公钥和私钥。公钥用于加密,私钥用于解密。因此,这些密钥之间的关系至关重要,私钥永远不应共享。相反,它应该保存在boss系统的.ssh文件夹中。请注意,创建后,您的公钥和私钥将存储在.ssh文件夹中。下一步是将公钥复制到您想要从老板系统免密码访问的系统。您可以使用scp命令执行此操作,但此时您仍需要输入密码。在此示例中,系统称为“目标”。boss$scp.ssh/id_rsa.pubmyacct@target:/home/myaccountmyacct@target的密码:您需要在目标系统(将运行命令的系统)上安装公钥。如果您没有.ssh目录(例如,您从未在系统上使用过ssh),运行这样的命令将为您设置一个:target$sshlocalhostdatetarget$ls-la.sshtotal12drwx------2myacctmyacct4096Jan1911:48.drwxr-xr-x6myacctmyacct4096Jan1911:49..-rw-r--r--1myacctmyacct222Jan1911:48known_hosts还在目标系统上,需要把从“boss”系统传来的公钥添加到.ssh/authorized_keys文件中。如果文件已经存在,使用下面的命令将其添加到文件的末尾;如果文件不存在,则创建文件并添加密钥。target$catid_rsa.pub>>.ssh/authorized_keys接下来需要确保你的authorized_keys文件权限是600,如果不是,执行命令chmod600.ssh/authorized_keys。target$ls-lauthorized_keys-rw--------1myselfmyself569Jan1912:10authorized_keys还要检查目标系统上.ssh目录的权限是否设置为700。执行chmod700.ssh如有必要,命令修改权限。target$ls-ld.sshdrwx------2myacctmyacct4096Jan1415:54.ssh此时,您应该可以从boss系统远程运行命令到目标系统而无需密码。这应该有效,除非目标系统上的目标用户帐户与您尝试连接的用户和主机具有相同的旧公钥。如果是这样,您应该删除较早的(和冲突的)条目。使用脚本使用脚本可以简化一些任务。但是,在下面的示例脚本中,您会遇到的一个恼人的问题是在配置无密码访问之前必须多次输入目标用户的密码。一种选择是将脚本分成两部分——需要在boss系统上运行的命令和需要在目标系统上运行的命令。这是“一步到位”版本的脚本:#!/bin/bash#注意:此脚本要求您拥有远程帐户的密码#,以便使用您的公钥设置免密码访问LOC=`hostname`#你想从中运行命令的本地系统#woapassword#gettargetsystemandaccountecho-n"targetsystem>"readREMecho-n"targetuser>"readuser#createakeypairifnopublickeyexistsif[!-f~/.ssh/id_rsa.pub];然后ssh-keygen-trsafi#确保远程帐户中存在.ssh目录echo检查远程系统上的.ssh目录sh$user@$REM"if[!-d/home/$user/.ssh];thenmkdir/home/$user/.ssh;fi"#共享公钥(使用本地主机名)echo复制公钥cp~/.ssh/id_rsa.pub$user@$REM:/home/$user/$user-$LOC.pub#将公钥放入正确的位置echo将密钥添加到authorized_keysssh$user@$REM"cat/home/$user/$user-$LOC.pub>>/home/$user/.ssh/authorized_keys"#setpermissionsonauthorized_keysand.ssh(mightbeOKalready)echosettingpermissionsssh$user@$REM"chmod600~/.ssh/authorized_keys"ssh$user@$REM"chmod700~/.ssh"#tryitout--shouldNOTaskforapasswordechotesting--如果没有要求密码,你都是setssh$user@$REM/bin/hostname脚本已经配置为在你的每个上运行第一次你必须输入密码来告诉你它在做什么交互看起来像这样:$./rem_login_setuptargetsystem>fruitflytargetuser>lolacheckingfor.sshdirectoryonremotesystem公钥lola@fruitfly'spassword:id_rsa.pub100%567219.1KB/s00:00addingkeytoauthorized_keyslola@fruitfly'spassword:settingpermissionslola@fruitfly'spassword:testing--如果不要求密码,你就全部setfruitfly经过以上场景,你可以像这样的账号登录lola:$sshlola@fruitfly[lola@fruitfly~]$一次passwo设置了rd-freelogin,可以免密码从boss系统登录到target系统,运行任意ssh命令即可。以这种无密码方式操作并不意味着您的帐户不安全。然而,根据目标系统的性质,保护您在boss系统上的密码可能变得更加重要。