【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp
远程登录工具ssh && 跨主机远程拷贝scp
正文开始@Assassin
目录:
- 远程登录工具ssh && 跨主机远程拷贝scp
- 1. ssh简介:
- 2. ssh基本用法:
- 3. 配置别名登录:
- 4. 免密登录:
- 5. 远程执行命令:
- 6. scp跨主机远程拷贝:
1. ssh简介:
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在非安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,通常利用SSH来使用命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持,win10 已基本提供OpenSSH工具。
在设计上,ssh
是telnet
和非安全shell
的替代品。telnet
,Berkeley rlogin
,rsh
及rexec
等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。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
Path | Permission |
---|---|
.ssh directory (code) | 0700 (drwx------) |
private keys (ex: id_rsa ) (code)
|
0600 (-rw-------) |
config
|
0600 (-rw-------) |
public keys (*.pub ex: id_rsa.pub )
|
0644 (-rw-r–r–) |
authorized_keys (code)
|
0644 (-rw-r–r–) |
known_hosts
|
0644 (-rw-r–r–) |
这里的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@Ninghai
The 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~
【linux系统编程】远程登录工具ssh | 跨主机远程拷贝scp相关推荐
- Linux常用命令(一) —— 开关机命令shutdown、远程登录命令ssh、远程拷贝文件命令scp
目录 1.关机/重启命令 shutdown 2.远程登录命令 ssh 3.远程拷贝文件命令 scp 1.关机/重启命令 shutdown (1) 基本格式 直接使用 shutdown ...
- Linux外网远程登录访问内网主机
Linux外网远程登录访问内网主机 远程登录软件:Xshell6 主机系统:ubuntu-19.10-desktop-amd64 连接协议:ssh 虚拟机:VMware Workstation 16 ...
- linux telnet远程登录工具,Linux 远程登录(telnet ssh)
Linux 远程登录(telnet ssh) telnet [root@rhel6 ~]# rpm -qa | grep telnet telnet-server-0.17-47.el6.x86_64 ...
- Linux系统编程(一)——环境搭建
准备写系统的总结Linux系统的一些知识以及Linux系统编程.这一篇先讲Linux搭建常用的开发环境. 目录 0x01 Linux开发环境搭建 一.远程链接操作 0x02 GCC 一.安装 二.了解 ...
- 【Linux】Linux系统编程(入门与系统编程)(一)(环境搭建、常见指令以及权限理解)
目录 linux系统编程 : 1.推动技术进步的基本模式 2.理解操作系统的发展 Linux 背景介绍 UNIX发展的历史: Linux发展历史 开源 Linux的发行版本: a.技术角度 b.商业化 ...
- Linux可以用vs2019,使用visual studio 2019进行Linux系统编程
上篇说到一个简单模块如何直接在ubuntu下进行linux 模块驱动程序开发测试,这次讲如何用c操作模块? 使用visual studio 2019进行Linux系统编程 首先打开: 修改.安装Lin ...
- alin的学习之路(Linux系统编程:一)(Linux基础命令)
alin的学习之路(Linux系统编程:一)(Linux基础命令) 1.Linux学习准备 操作系统的作用 向上给用户提供简单的操作计算机硬件的方式 对下管理硬件 承上启下 程序运行在操作系统上,程序 ...
- linux 软件 web管理系统,如何快速安装Webmin(linux系统web管理配置工具)
如何快速安装Webmin(linux系统web管理配置工具) 简介: Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作 ...
- 在Linux系统下更改或更新SSH密钥密码的方法
本文介绍如何在Linux系统下更新或更改SSH密钥密码,也适用在Unix系统中.SSH密钥通常用于向某些信息系统的用户进行身份验证,SSH密钥本身是私钥,使用从密码短语导出的对称加密密钥进一步加密私钥 ...
最新文章
- marquee实现文字移动效果;js+div实现文字无缝移动效果
- torchtext语料库 词与 下标互转使用教程
- 逐飞科技对于STC8H1K系列的单片机正交解码的资料以及实验
- 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
- 前端:JS字符串操作函数类库
- 在Xshell 6开NumLock时按小键盘上的数字键并不能输入数字
- 大数据实验报告总结体会_建设大数据中台架构思考与总结
- centos mysql导出数据库命令_在centos(linux)下用命令导出mysql数据库数据
- 如何成为java高手
- 关于自动装箱和自动拆箱
- Linux查看so库访问的IP,linux-ip命令杂记
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用6
- K3 官改新手小白配置阿里DDNS 超级详细
- vue.js安装步骤教程
- 微信小程序轮子 - 外卖点餐左右联动界面完整源码(类似美团饿了么点餐界面)
- 阿里云智能技术战略架构师陈绪:透视2019云计算酣战
- SD-WAN最让人心动的四个功能
- 水仙花数(java)
- motoman机器人正向运动学
热门文章
- 十动然鱼!《闲鱼年会经济数据》来了:卖得最快的奖品还是它
- 索尼发布Xperia 8手机:采用骁龙630处理器
- iPhone8已跌至三千元档,迫不及待的入手了一部
- IG击败TOP进入春季赛决赛 王思聪督战时吃玉米动作亮了
- 给fiddle 解密_fiddler学习笔记2 字段说明;移动设备、解密证书
- python如何移动图片_Pygame的图像移动|python基础教程|python入门|python教程
- 【java】为什么 HashMap 的加载因子是0.75?
- 【Flink】Flink 报错 flink 1.12.5 启动作业报 partition not found
- 【kafka】kafka topic某些分区 副本落后leader太多
- 【SpringCloud】Spring cloud Alibaba Sentinel 服务降级 (阿里版本Hystrix)