如何配置linux系统信任关系

如何配置linux系统信任关系,第1张

在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 user@10.11.xx.xx:~

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地址。

在我们日常管理与维护服务器个过程中,我们都需要使用远程连接工具,今天我们就一同来总结下Linux常用的安全远程连接工具-OpenSSH。

【远程登录协议】

1、telnet:是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主

机工作的能力。默认使用的是TCP的23号端口,采用C/S架构,在用户登录的过程中传输的信息都是明文信息,安全无法保障,所以不建议用telnet。

2、ssh:为Secure Shell 的缩写,由IETF的网络工作小组所制定;SSH

为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH

协议可以有效防止远程管理过程中的信息泄露问题。默认使用的是TCP的22号端口,也是基于C/S架构,SSH有两个版本v1与v2。

sshv1:基于CRC-32做MAC(消息摘要认证),不安全,强烈建议不使用;

sshv2:基于双方主机的协商选择使用最安全的MAC方式 ,其有如下特点:1、加密机制及MAC机制由双方协商选定;2、基于DH实现密钥交换,基于RSA或DSA实现身份认证;3、客户端通过检查服务器端的主机密钥来判断是否能够继续通信;

【OpenSSH简述】

OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为rlogin、rsh

rcp以及telnet的直接替代品使用。更进一步,其他任何TCP/IP连接都可以通过SSH安全地进行隧道/转发。OpenSSH

对所有的传输进行加密,从而有效地阻止了窃听、连接劫持,以及其他网络级的攻击。OpenSSH 由 OpenBSD project 维护。

登录过程和使用rlogin或telnet建立的会话非常类似。在连接时,SSH

会利用一个密钥指纹系统来验证服务器的真实性。只有在第一次连接时,用户会被要求输入yes进行确认,之后的连接将会验证预先保存下来的密钥指纹。如果保

存的指纹与登录时接收到的不符, 则将会给出警告。 指纹保存在 ~/.ssh/known_hosts中,对于SSHv2指纹,则是

~/.ssh/known_hosts2。

默认情况下,较新版本的OpenSSH只接受SSHv2连接。如果能用版本2则客户程序会自动使用,否则它会返回使用版本1的模式。此外,也可以通

过命令行参数-1或-2来相应地强制使用版本1或2。 保持客户端的版本1能力是为了考虑较早版本的兼容性,建议尽量使用版本2。

【SSH服务器和客户端工作流程】

OpenSSH使用C/S架构:

服务端工具(S):sshd

客户端工具(C):ssh命令、putty、xshell、securecrt、sshshellclient;

【OpenSSH客户端组件-ssh】

配置文本:/etc/ssh/ssh_config

使用方法:

ssh [username@] host [COMMAND]或 ssh -l username host [COMMAND]

-p PORT:指定远程服务器端口;

-l username:指定登录远程主机的用户,不指定则使用当前用户;

username@:等同于 -l username

如果设置了COMMAND,表示使用username账户登录远程主机执行一次指定的命令并返回结果,不会停留在远程主机上;

[root@www ~]# ssh 192.168.0.110 #使用root用户登录;

The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established.

RSA key fingerprint is 01:2e:43:cc:bc:1d:f1:e5:f0:f4:89:78:74:a9:49:44.

Are you sure you want to continue connecting (yes/no)? yes #第一次连接,需手动进行确认;

Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts.

root@192.168.0.110's password: #输入远程主机root账户的密码;

Last login: Mon May 11 16:44:52 2015 from 192.168.0.104

[root@mailCentOS6 ~]# #登录成功了,远程主机名为mailCentOS6;

[root@mailCentOS6 ~]# ls #显示远程主机root家目录下的文件;

2.sh boot.iso install.log sdb.mbr test1

anaconda-ks.cfg crontab install.log.syslog \temp\test

[root@mailCentOS6 ~]# exit #退出登录;

logout

Connection to 192.168.0.110 closed.

[root@www ~]# ssh root@192.168.0.110 ls #使用root登录远程主机,执行一次ls命令,返回结果便退出;

root@192.168.0.110's password: #第二次连接,就不需要输入yes了,直接输入密码即可;

2.sh

anaconda-ks.cfg

boot.iso

crontab

install.log

install.log.syslog

sdb.mbr

\temp\test

test1

[root@www ~]# #看到了吗,我们当前并没有登录在远程主机;

【OpenSSH服务器端组件-sshd】

配置文件:/etc/ssh/sshd_config(通过修改此文件可以修改ssh的默认监听端口与其他参数)

服务脚本:/etc/rc.d/init.d/sshd

服务启动|停止|重启:serveice sshd start|stop|restart

脚本配置文件:/etc/sysconfig/sshd

配置参数

# man sshd_config 查看配置参数的说明;

# vim /etc/sysconfig/sshd 通过编辑配置文件来修改配置参数;

#+空格+文字:以此格式开头的行表示改行为注释说明;

#+文字:以此格式开头的行表示可启用选项,不改变则表示使用该选项的默认设置,反之使用设定值“#”要去掉哦!

例:#Port 22 如不去掉#且22不变,表示使用默认的22号端口;

若把#Port 22改成port 7777,表示把sshd的监听端口改成7777;

注意:修改参数与配置后,必须重启服务(service sshd restart).

经常需要修改的参数:

[root@www ~]# cat /etc/ssh/sshd_config

# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

# This is the sshd server system-wide configuration file. See

# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with

# OpenSSH is to specify options with their default value where

# possible, but leave them commented. Uncommented options change a

# default value.

#Port 22 #修改默认监听的端口;

port 7777 #把sshd的监听端口改成7777;

#AddressFamily any #监听的地址家族,指定是监听在IPV4上还是IPV6上,any表示所有;

#ListenAddress 0.0.0.0 #指定监听的地址 (0.0.0.0表示本机的所有地址);

#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new

# installations. In future the default will change to require explicit

# activation of protocol 1

Protocol 2

# HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key #使用shhv1用到的主机密钥;

# HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key

#KeyRegenerationInterval 1h

#ServerKeyBits 1024 #密钥长度;

# Logging

# obsoletes QuietMode and FascistLogging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO

# Authentication:

#LoginGraceTime 2m #登录宽限期;

#PermitRootLogin yes #是否允许管理员直接登录;

#StrictModes yes

#MaxAuthTries 6 #最大密码输入错误次数;

#MaxSessions 10 #最大会话个数;

#RSAAuthentication yes #是否允许使用RSA机制来认证;

#PubkeyAuthentication yes

#--------中间不长改变的配置参数略----------

Subsystem sftp/usr/libexec/openssh/sftp-server #表示是否启动sftp功能;

# Example of overriding settings on a per-user basis

#Match User anoncvs

# X11Forwarding no

# AllowTcpForwarding no

# ForceCommand cvs server

sshd认证方式:

1、基于口令的认证;

2、基于密钥的认证;

# ssh-keygen -t rsa 用rsa算法生成密钥,默认密钥为id_rsa(私钥), id_rsa.pub(公钥)

# ssh-keygen -f /path/to/somefile -P oldpassword 根据现有的密钥文件生成密钥

-f /path/to/somefile: 密钥文件保存在的位置;

-P '': 指定生成旧密钥时使用的密码;

方法一:把本地主机生成的公钥 id_rsa.pub使用scp复制到远程主机的上,在远程主机使用cat id_rsa.pub>>.ssh/authorized_keys追加该公钥信息,这样就可以实现基于密钥认证的ssh登录;

方法二:# ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST

[root@www ~]# ssh-keygen -t rsa #用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:

c2:f9:c2:3d:4d:ca:52:39:7a:a7:33:de:42:11:d3:8f root@www.99.com

The key's randomart image is:

+--[ RSA 2048]----+

| . |

|o . |

| o o |

| . ...E .|

| + S.. |

| . B.= |

| =.B o |

| ++= |

| .o+. |

+-----------------+

[root@www ~]# ssh-keygen -f .ssh/id_rsa -P '' #根据现有密钥文件重新生成密钥;

Generating public/private rsa key pair.

.ssh/id_rsa already exists.

Overwrite (y/n)? y #提示是否确定要覆盖;

Your identification has been saved in .ssh/id_rsa.

Your public key has been saved in .ssh/id_rsa.pub.

The key fingerprint is:

bf:55:f0:0b:a5:ee:4e:4a:1d:d3:b1:0e:66:ee:55:9b root@www.99.com

The key's randomart image is:

+--[ RSA 2048]----+

| |

| |

|. o |

| * o |

|S O = .|

| . * B oo|

| o * +E |

| . B . |

| o.+|

+-----------------+

#-----使用方法一:实现通过密钥文件完成身份验证(不需要输入密码)-----

[root@www ~]# scp .ssh/id_rsa.pub root@192.168.0.110:/root/ #使用spc命令复制公钥文件到远程

#主机的用户家目录下的.ss/路径下;

root@192.168.0.110's password: #输入登录远程主机的密码;

id_rsa.pub 100% 397 0.4KB/s 00:00 #提示复制成功;

[root@mailCentOS6 ~]# ls .ssh/ #验证确认文件复制成功;

id_rsa.pub known_hosts

[root@mailCentOS6 ~]# touch .ssh/authorized_keys #路径内没有自动验证密钥文件,创建一个;

[root@mailCentOS6 ~]# cat .ssh/id_rsa.pub >>.ssh/authorized_keys #把公钥追加到自动验证密钥文件;

[root@www ~]# ssh 192.168.0.110

Last login: Mon May 11 20:45:10 2015 from 192.168.0.111

[root@mailCentOS6 ~]# #OK了,看到了没有,不用输入密码我们就直接可以远程登录了!!

#-----使用方法二:实现通过密钥文件完成身份验证(不需要输入密码)-----

[root@mailCentOS6 ~]# rm -f .ssh/authorized_keys #删除原有保存的自动验证密钥文件;

[root@www ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.110 #使用命令自动传输生成自动验证密钥文件;

root@192.168.0.110's password:

Now try logging into the machine, with "ssh 'root@192.168.0.110'", and check in:

.ssh/authorized_keys #提示生成的文件;

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

[root@www ~]# ssh 192.168.0.110 #验证看看是否可以登录;

Last login: Mon May 11 21:02:29 2015 from 192.168.0.111

[root@mailCentOS6 ~]# ls .ssh/ #看到了没有,我们现在已经登录到了mailCentOS6这台主机上了;

authorized_keys known_hosts

【命令补充】

scp: 利用ssh协议在主机之间实现安全文件传输的工具

scp SRC1... DEST

分两种情形:

1、源文件在本机,目标为远程主机

# scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere

源可以是目录或文件有多个,目标必须是目录

2、源文件在远程,本地为目标

# scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere

-r: 复制目录时使用(实现递归复制),scp默认不能复制目录;

-p: 保持源文件的元数据信息,包括mode和timestamp

-q: 静默模式,复制过程不显示状态信息;

-p PORT: 指定ssh协议监听的端口(远程主机)。

要使用SSH免密码登录,假设现在有两台机器hadoop@wang-PC(192.168.10.100),作为A机,hadoop@chen-PC(192.168.10.107),作为B机。现想hadoop@wang-PC通过ssh免密码登录到hadoop@chen-PC。1.在A机下生成公钥/私钥对。[hadoop@wang-PC ~]$ ssh-keygen -t rsa -P ''敲击回车键即可, 它在/home/hadoop下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。2.把A机器下的id_rsa.pub复制到B机器下的.ssh/authorized_keys文件里。[hadoop@wang-PC ~]$ scp .ssh/id_rsa.pub hadoop@192.168.10.107:/home/hadoop/id_rsa.pub.hadoop_wanghadoop@192.168.10.107's password:由于还没有免密码登录的,所以要输入密码。3.B机把从A机复制的id_rsa.pub.hadoop_wang添加到.ssh/authorzied_keys文件里。[hadoop@chen-PC ~]$ cat id_rsa.pub.hadoop_wang >>.ssh/authorized_keys[hadoop@chen-PC ~]$ chmod 600 .ssh/authorized_keysauthorized_keys的权限要是600。4.A机登录B机。[hadoop@wang-PC ~]$ ssh 192.168.10.107第一次登录是时要你输入yes。 现在A机可以无密码登录B机了。小结:登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)想让A,B机无密码互登录,那B机以上面同样的方式配置即可,把B的公钥复制过去添加到authorized_keys的末尾就行了。至此完毕。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7352706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存