A. 如何在两台linux服务器之间用RSA键对的方法SSH/SCP不需密码
1。 分别从A和B上登录作为root后运行ssh-keygen,目的是简单地在/root下创建目录.ssh,当提示输入
passphase时打入两次回车。这将生成/root/.ssh/identity and /root/.ssh/identity.pub2。 先测试一下,从A登录作为root,打入#ssh B,会要求提示root password。
3。 现在从A登录作为root,运行scp /root/.ssh/identity.pub B:/root/.ssh/authorized_keys。
文件名必须不能弄错。
4。现在再从A运行#ssh B则不需要密码了:)基本原理:
1。 如果你希望从A作为用户user1 SSH 到B 作为用户user2, 若要用RSA键对法认证且不需要密码,则B上的ssh
后台程序拿出~user2/.ssh/authorized_keys中的与A有关的RSA公钥来对A上的以user1身份运行的ssh客户程序
进行挑战,前面我们已经把A上的identity.pub拷贝到B上作为authorized_keys了。则A保持私钥identity,而B
上的sshd又拿出A的公钥来挑战,因此成功,你可以加很多行到authorized_keys以允许其它服务器的公钥可以加进来。
常见应用举例:1。 在A上以用户root SSH到B上作为普通用户user而不是root,因为为了安全
,有时不需要作为root,只需要作
为普通用户不需要密码以完成相应工作即可。
登录作为root在A上
A# scp /root/.ssh/identity.pub user@B:/home/user/.ssh/authorized_keys2. tar一批文件从A到B。
A# tar cvf - /etc | ( ssh B tar xvf -)3. 运行A上的cronjob,对某文件作改动后传到B
0 1 * * * cat /etc/shadow | awk -F: {print $1":"$2} | (ssh B cat > /home/passwd)常见问题:
1。 这种方式的SSH需要B上的sshd_config中允许直接的root login (PermitRootLogin yes).
2. 我有服务器A和其它服务器B,C,D。我想从A SSH到这些服务器但不要自动,最好输入RSA passphase,但太
a. 要A上运行ssh-keygen时输入passphase字。
b. 要登录到A上后运行A#ssh-agent bash
c. 再运行ssh-add加passphase进入内存
B. linux openSSH 设置成RSA认证 用PUTTY无法连接
那可能是密钥不正确,把密码删掉,重新生成一个再试试
C. linux系统下使用RSA对用户登录密码进行加解密,解密后出现乱码
请使用gnupg(命令为gpg),我干过这种事,如果觉得字符界面不方便的话,可以安装一些图形前端,比如kde下的kgpg或者kleopatra,不但密字符串,而且密二进制数据
ssh-keygen生成出来的密钥只能用来“验证”
而你需要的是“加密”
补充回
gpg绝对可以,我曾经用gpg加密过4.5G的DVD iso,不过,正如你知道的那样,公钥体制速度是巨慢的。
假设你已经创建了密钥对名称为abc, 要加密M07A0bpp-Duke.pdf
gpg -e -r abc M07A0bpp-Duke.pdf
将得到的M07A0bpp-Duke.pdf.gpg发送即可
当abc解密时,输入以下命令即可
gpg -u abc M07A0bpp-Duke.pdf.gpg
D. 如何在linux中如何配置ssh免密码登录
首先需要在服务器端设置/etc/ssh/sshd_config
# vim /etc/ssh/sshd_config
修改如下两行为yes。其实大多数情况下不用修改,默认就是yes。
RSAAuthentication yes
PubkeyAuthentication yes
(1) 如果客户机和服务器都是Linux机器,那么我们使用下面的方法:(后面第2节会提到怎么在Windows下使用Putty生成密钥对)
我们需要在客户端生成RSA密钥对。使用ssh-keygen命令:
# ssh-keygen -t rsa
参数t的意思是type,后面跟着加密类型,这里我们是rsa。
然后会提示你输入密钥保存完成文件名,这里我们需要使用默认的id_rsa,之后才能正常才能登录。如果你生成的密钥作为其他用处,那么可以命名为其他名称:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cake/.ssh/id_rsa):
之后会提示你输入一个passphrase,我们这里可以留空,这样我们登录的时候就不许输入密码。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
然后会提示你密钥生成成功。这是你的私钥保存为~/.ssh/id_rsa,你的公钥是~/.ssh/id_rsa.pub
我们现在需要做的是,把id_rsa.pub的内容,添加的服务器端的~/.ssh/autherized_keys文件最后。
你可以把这个文件上传到服务器端,然后使用命令:
# cat id_rsa.pub >> ~/.ssh/autherized_keys
到这里就完成了。
(2) 在Windows下使用Putty生成密钥对:
Putty的安装目录下有个puttygen.exe程序,我们运行这个程序。
之后点击Generate,开始生成密钥对。我们需要根据提示,在指定方框内随机滑动鼠标。这是为了根据鼠标轨迹,产生一些随机数据。
之后生成结束,我们点击Save Private Key将私钥存放在某个目录中。然后赋值最上面文本框中的全部内容,粘贴到Linux服务器端的autherized_key的最后。
我们现在可以关闭这个小程序。
现在打开Putty,在左边的选项中,选择Conneciton–SSH–Auth,在Private key file for authentication中,选择刚才保存的私钥路径就可以了。
到此位置,Putty也可以不用密码登录了。
E. 怎样把Linux的私钥文件id_rsa转换成putty的ppk格式呢
在Linux 主机下产生的私钥文件putty是不认识的,putty只认识自己的ppk格式,要在这两种格式之间转换,需要PuTTYgen这个程序。puttygen是putty的配套程序,putty的安装包和winscp的安装包都包含了这个程序,当然你也可以在
F. linux生成的rsa秘钥在哪
方法一, 有的时候经常需要登录ssh,每次都需要输入密码,会比较繁琐。所以设置了一下使用RSA公钥认证的方式登录Linux。 首先需要在服务器端设置/etc/ssh/sshd_config # vim /etc/ssh/sshd_config 修改如下两行为yes。其实大多数情况下不用修改,默认就是yes。 RSAAuthentication yes PubkeyAuthentication yes (1) 如果客户机和服务器都是Linux机器,那么我们使用下面的方法:(后面第2节会提到怎么在Windows下使用Putty生成密钥对) 我们需要在客户端生成RSA密钥对。使用ssh-keygen命令: # ssh-keygen -t rsa 参数t的意思是type,后面跟着加密类型,这里我们是rsa。 然后会提示你输入密钥保存完成文件名,这里我们需要使用默认的id_rsa,之后才能正常才能登录。如果你生成的密钥作为其他用处,那么可以命名为其他名称: Generating public/private rsa key pair. Enter file in which to save the key (/home/cake/.ssh/id_rsa): 之后会提示你输入一个passphrase,我们这里可以留空,这样我们登录的时候就不许输入密码。 Enter passphrase (empty for no passphrase): Enter same passphrase again: 然后会提示你密钥生成成功。这是你的私钥保存为~/.ssh/id_rsa,你的公钥是~/.ssh/id_rsa.pub 我们现在需要做的是,把id_rsa.pub的内容,添加的服务器端的~/.ssh/autherized_keys文件最后。 你可以把这个文件上传到服务器端,然后使用命令: # cat id_rsa.pub >> ~/.ssh/autherized_keys 到这里就完成了。 (2) 在Windows下使用Putty生成密钥对: Putty的安装目录下有个puttygen.exe程序,我们运行这个程序。 之后点击Generate,开始生成密钥对。我们需要根据提示,在指定方框内随机滑动鼠标。这是为了根据鼠标轨迹,产生一些随机数据。 之后生成结束,我们点击Save Private Key将私钥存放在某个目录中。然后赋值最上面文本框中的全部内容,粘贴到Linux服务器端的autherized_key的最后。 我们现在可以关闭这个小程序。 现在打开Putty,在左边的选项中,选择Conneciton–SSH–Auth,在Private key file for authentication中,选择刚才保存的私钥路径就可以了。 到此位置,Putty也可以不用密码登录了。 方法二 使用Linux主机生成的密匙 1、生成密匙 [root@ .ssh]#ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: e4:9a:47:a7:b4:8a:0b:98:07:b8:70:de:6b:16:2c:0croot@ 2、将 /root/.ssh/id_rsa.pub改名为/root/.ssh/authorized_keys [root@ .ssh]#mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys 3、将私钥id_rsa拷贝到远程客户端 1)、如果远程客户端是linux,拷贝到远程客户端/root/.ssh/即可 2)、putty作为远程客户端在 putty不能识别直接从服务器拷贝来的私钥,需要使用puttygen.exe进行格式转换 (1)、打开puttygen.exe --> Conversions --> Import Key (2)、选择拷贝过来的私钥文件id_rsa (3)、Save private key->id_rsa.ppk(保存私钥) 4、打开putty.exe 1)、Session --> Host Name (填写服务器地址或者域名) 2)、Connection --> SSH --> Auth (点Browse选择刚生成的id_rsa.ppk) 3)、open 成功打开后出现如下提示: login as: root Authenticating with public key "imported-openssh-key" ---------------------------------------------------------------------------------- 当然你有可能会遇到这个错误 [因为我遇到了,呵呵]: Permissions 0755 for '你配置的公钥文件路径' are too open. 这个是因为这几个文件权限设置的有点问题 执行命令: chmod 600 你的文件
G. linux ssh-keygen -t rsa会生成公钥和加密文件,但是只支持登陆无需密码,有没有用文件来加密和解密文件。
请使用gnupg(命令为gpg),我干过这种事,如果觉得字符界面不方便的话,可以安装一些图形前端,比如kde下的kgpg或者kleopatra,不但可以加密字符串,而且可以加密二进制数据
ssh-keygen生成出来的密钥只能用来“验证”
而你需要的是“加密”
补充回答:
gpg绝对可以,我曾经用gpg加密过4.5G的DVD iso,不过,正如你知道的那样,公钥体制速度是巨慢的。
假设你已经创建了密钥对名称为abc, 要加密M07A0bpp-Duke.pdf
gpg -e -r abc M07A0bpp-Duke.pdf
将得到的M07A0bpp-Duke.pdf.gpg发送即可
当abc解密时,输入以下命令即可
gpg -u abc M07A0bpp-Duke.pdf.gpg
H. linux地下利用什么方法用rsa算法对文件进行加密
楼主你自己做了多少了?还是3个步骤都不会?其实3个步骤的原理都比较简单,你参考下教科书和网络就行了。资料不要太多啊。。。
I. 怎样把Linux的私钥文件id
vim /etc/ssh/sshd_config找到以下内容,并去掉注释符”#“RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys/sbin/service sshd restart 刷新配置ssh-keygen -t rsa 服务器生成密钥cd /root(用户根目录)/.sshid_rsa是密钥文件,id_rsa.pub是公钥文件,复制公钥到服务端scp id_rsa.pub 客户端IP:/root/.ssh/authorized_keys注意:.ssh目录权限必须为 755rsa_id.pub 及authorized_keys权限必须为644
J. 如何建立linux ssh信任的方法与常见问题
在Linux服务器之间建立信任关系,是很多线上服务系统的基础性工作,这样能便于程序在多台服务器之间自动传输数据,或者方便用户不输入密码就可以在不同的主机间完成登录或者各种操作。
网上关于建立Linux信任关系(ssh trust)的中文文章有一些,但是写得都不太详细,这里汇总了方方面面的资料,把多机信任关系建立方法说说清楚(文/陈运文)
一 建立信任关系的基本操作
基本场景是想从一台Server服务器直接登录另一台,或者将Server服务器的数据不需密码验证直接拷贝至Client服务器,以下我们简称Server服务器为S(待发送的数据文件在这台服务器上),Client服务为C,信任关系的最简单操作方法如下:
1 在S服务器上,进入当前用户根目录下的隐藏目录 .ssh,命令如下:
cd ~/.ssh
(注:目录名前的点好”.”表示该文件夹是一个特殊的隐藏文件夹,ls命令下默认是看不到的,通过 ls –a 命令观察到)
2 生成S服务器的私钥和公钥:
ssh-keygen -t rsa
(注:rsa是一种加密算法的名称,此处也可以使用dsa,关于rsa和dsa算法的介绍可见本文后半章节)
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,那肯定是你命令敲错字符了J
-提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add
-注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下
4 把公钥拷贝至Client服务器上
很简单,例如 scp id_rsa.pub [email protected]:~
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服务器,仍然是需要密码验证的。如果需要两台服务器间能直接互传数据,则反过来按上述步骤操作一下就可以了
二 删除服务器间信任关系的方法
如果想取消两台服务器之间的信任关系,直接删除公钥或私钥是没有用的,需要在Client服务器上,打开 ~/.ssh/ authorized_keys 文件,找到对应的服务器的公钥字段并删除
每个段落的开头是ssh-rsa字样,段尾是Server服务器的帐号和ip(如下图红框),需要细心的找一下后删除整段
密钥文件内容和删除Linux服务器间信任关系的方法
三 各种可能遇到的情况和处理方法
–提示 port 22: Connection refused
可能的原因:没有正确安装最新的openssh-server,安装方法如下
sudo apt-get install openssh-server
不支持apt安装的,可以手工下载:
wget ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz
–关于目录和文件的权限设置
.ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600:
chmod 600 id_rsa
否则ssh服务器会拒绝登录
四 关于RSA和DSA加密算法
在ssh-keygen命令中,-t参数后指定的是加密算法,可以选择rsa或者dsa
RSA 取名自算法的三位提出者Ron Rivest, Adi Shamir, and Leonard Adleman的姓名首字母,作为一种非对称加密算法,RSA的安全性基于及其困难的大整数分解(两个素数的乘积的还原问题)。关于RSA算法原理的文章很多,感兴趣的朋友可以找来读一读。
DSA = Digital Signature Algorithm,基于有限域离散对数难题,是Schnorr和ElGamal签名算法的变种,一般用于数字签名和认证,被美国标准局(NIST)采纳为数字签名标准DSS(Digital Signature Standard),based on discrete logarithms computation.
DES = Digital Encryption Standard. Obsolete standard.
RSA算法好在网络容易实现密钥管理,便进行数字签名,算法复杂,加/解速度慢,采用非对称加密。在实际用于信任关系建立中,这两种方法的差异很微小,可以挑选其一使用。
五 关于SSH协议的介绍
SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Group所制定的一种协议。SSH的主要目的是用来取代传统的telnet和R系列命令(rlogin,rsh,rexec等)远程登陆和远程执行命令的工具,实现对远程登陆和远程执行命令加密。防止由于网络监听而出现的密码泄漏,对系统构成威胁。
ssh协议目前有SSH1和SSH2,SSH2协议兼容SSH1。目前实现SSH1和SSH2协议的主要软件有OpenSSH和SSH Communications Security Corporation公司的SSH Communications 软件。前者是OpenBSD组织开发的一款免费的SSH软件,后者是商业软件,因此在linux、FreeBSD、OpenBSD、NetBSD等免费类UNIX系统种,通畅都使用OpenSSH作为SSH协议的实现软件。因此,本文重点介绍一下OpenSSH的使用。需要注意的是OpenSSH和SSH Communications的登陆公钥/私钥的格式是不同的,如果想用SSH Communications产生的私钥/公钥对来登入到使用OpenSSH的linux系统需要对公钥/私钥进行格式转换。
第一次登陆后,ssh就会把登陆的ssh指纹存放在用户home目录的.ssh目录的know_hosts文件中,如果远程系统重装过系统,ssh指纹已经改变,你需要把 .ssh 目录下的know_hosts中的相应指纹删除,再登陆回答yes,方可登陆。请注意.ssh目录是开头是”.”的隐藏目录,需要ls –a参数才能看到。而且这个目录的权限必须是700,并且用户的home目录也不能给其他用户写权限,否则ssh服务器会拒绝登陆。如果发生不能登陆的问题,请察看服务器上的日志文件/var/log/secure。通常能很快找到不能登陆的原因。
六 关于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地址。