300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp

【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp

时间:2020-06-02 00:13:19

相关推荐

【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp

远程登录工具ssh && 跨主机远程拷贝scp

正文开始@Assassin

目录:

远程登录工具ssh && 跨主机远程拷贝scp1. ssh简介:2. ssh基本用法:3. 配置别名登录:4. 免密登录:5. 远程执行命令:6. scp跨主机远程拷贝:

1. ssh简介:

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在非安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,通常利用SSH来使用命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。,微软宣布将在未来的操作系统中提供原生SSH协议支持,win10 已基本提供OpenSSH工具。

在设计上,sshtelnet和非安全shell的替代品。telnetBerkeley rloginrshrexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击ssh旨在保证非安全网络环境中的信息加密完整且可靠。

2. ssh基本用法:

在linux系统上ssh是极为常用的工具,通过ssh client可以连接到运行了ssh server的远程服务器上。ssh client的基本使用方法是:

远程登录服务器:

ssh user@hostname -p port

user:用户名hostname:ip地址/域名port:端口号,默认是22

实际上“ -p port ”不是很常用,ssh的端口号默认为22,如果需要登录到某一特定端口时才需要使用到 -p 选项:

ssh Assassin@114.55.55.152

默认端口号为22,输入passwd后便可远程登录到我的云服务器:

注:如果事先没有安装过ssh,需先安装openssh-server

3. 配置别名登录:

在使用ssh进行远程登录时,格式为ssh user@hostname -p port,这样写起来相对来说比较不友好,毕竟hostname一般来说是一串点分十进制的四字节字符串。可以通过配置别名的方式来曲线登录,在~/.ssh/config文件中添加格式如下表:提前指定Host别名,将ip地址,用户名及端口号(不填默认为22)填到对应的位置即可。

如果家目录下没有.ssh的话可以自行创建一个,同理.ssh中没有config也是自己创建。可以同时设置多个别名:

Host myserver1HostName IP地址/域名User 用户名Port 端口号Host myserver2HostName IP地址/域名User 用户名Port 端口号

保存退出后即可使用指定的别名登录到指定服务器的指定用户,like this:

由于没有其他云服务器了,这里姑且就直接用当前服务器的root用户来试验了

可以看到是使用了server别名来进行远程登录的,还是比较高效的。

ps:刚刚在配置了~.ssh/config保存退出后执行ssh + 别名登录,发现竟然报错了,错误信息是Bad owner or permissions on ~/.ssh/config,意思是提示:错误的所有者或权限,查阅了一番资料后解决了这个问题。在执行ssh操作时可能会出现文件夹或者文件没有生效的情况,也就是无效的权限,可能需要遵循以下的权限表:

因为我的.ssh文件夹中没有config文件,所以由普通用户创建的config文件的权限为664,而根据权限表,config文件的权限应该是600

这里的config文件可能是需要仅所有者的rw权限,也就是600,解决方法自然是:

[Assassin@Ninghai .ssh]$ sudo chmod 600 config

至于为什么会出现这种情况,我个人觉得应该是.ssh文件夹对于所属组及others没有进入的x权限,自然也就不允许文件夹里面的文件对于非所有者用户也任何权限了,因为.ssh文件夹非所有者用户都进不去,就没有必要谈对文件夹中的文件有r权限了。了解的大神请issue!!

补充:

普通用户创建文件夹的权限是775,普通文件的权限是664 ;

root用户创建文件夹的权限是755,普通文件的权限是644 ;

这是由于umask的不同。具体原因请见:权限管理的 5.4 修改文件的掩码

4. 免密登录:

要实现免密登录的前提是得生成ssh密钥,密钥分为公钥和私钥。

基本操作是:

在自己的服务器上生成一对ssh key(如果已经存在可以不生成)拷贝公钥到远端的服务器上

创建密钥的方式是:

[Assassin@Ninghai ~]$ ssh-keygen -t rsa

不加任何选项的ssh-keygen也可生成密钥,不加任何选项默认是以rsa算法生成密钥。

执行ssh-keygen即可生成ssh密钥,一路回车即可。

生成的信息如下:大概的意思是说生成的公钥放在了~/.ssh/id_rsa.pub,私钥放在了~/.ssh/id_rsa

Your identification has been saved in /home/Assassin/.ssh/id_rsa.Your public key has been saved in /home/Assassin/.ssh/id_rsa.pub.The key fingerprint is:SHA256:IZa/qbYS+MUW8Xy5RbtZtra/dShXija2kA0fWKjqI7U Assassin@NinghaiThe key's randomart image is:+---[RSA 2048]----+| ||.. .. ||++. .o.. ||..oooooo o || . . .S.oo.= ..|| . . =. o.=ooo+ || . =..o o O.+.o|| +.E. + =. o||++o . oo|+----[SHA256]-----+

执行结束后,~/.ssh目录下会多出两个文件:

id_rsa:私钥id_rsa.pub:公钥

可以使用cat指令查看公私钥内容。

之后就是第二步操作:拷贝公钥。基本想法是:想免密登录到哪个服务器,就将公钥拷贝给哪个服务器即可。

例如想免密登录server服务器。则只需将公钥中的内容复制到server中的~/.ssh/authorized_keys文件里即可。(没有authorized_keys可自行创建)

不过要使远端服务器记住公钥,更为简单的方法是直接执行指令:ssh-copy-id user@hostname -p port,该指令会一键添加公钥到远端服务器的~/.ssh/authorized_keys文件中:

现在从当前服务器远程登录到server服务器无需验证密码:

自然,在server服务器也生成了~/.ssh/authorized_keys文件,其中的内容便是对应的公钥:

5. 远程执行命令:

ssh可以实现跨主机远程执行命令,命令格式:

[Assassin@Ninghai ~]$ ssh user@hostname 'command'

在本地主机执行远端服务器的指令,对于长命令或者命令列表需要用单引号括起来:

6. scp跨主机远程拷贝:

scp用于主机之间的远程传输文件,scp 是 secure copy 的缩写,是linux系统下基于ssh登录进行安全的远程文件拷贝命令。

命令格式:

scp file user@hostname:path

将本主机下的文件复制到远端主机的path路径下。

也可一次拷贝多个文件:

scp file1 file2 user@hostname:path

拷贝文件夹:

scp -rf dir user@hostname:path

具体操作:

over~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。