0%

linux基础(42-59集)

P42远程管理常用命令

关机重启shutdown

Linux shutdown命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。

使用权限:系统管理者。

语法

1
shutdown [-t seconds] [-rkhncfF] time [message]

shutdown now 立即关机

shutdown +10 10分钟后关机

参数说明

  • -t seconds : 设定在几秒钟之后进行关机程序。
  • -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
  • -r : 关机后重新开机。(常用,一定要加,不加会启动不了了)
  • -h : 关机后停机。
  • -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
  • -c : 取消目前已经进行中的关机动作。(常用,取消之前动作)
  • -f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。
  • -F : 关机时,强迫进行 fsck 动作。
  • time : 设定关机的时间。
  • message : 传送给所有使用者的警告讯息。

实例

立即关机

1
# shutdown -h now

指定 10 分钟后关机

1
# shutdown -h 10

重新启动计算机

1
# shutdown -r now

查看或配置网卡信息

Ifconfig

网卡:一个专门负责网络通讯的硬件设备。

Linux ifconfig命令用于显示或设置网络设备。

ifconfig可设置网络设备的状态,或是显示目前的设置。

ifconfig | grep inet: 查看网卡对应IP地址

ifconfig:查看网卡配置信息

语法

1
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

参数说明

  • add<地址> 设置网络设备IPv6的IP地址。
  • del<地址> 删除网络设备IPv6的IP地址。
  • down 关闭指定的网络设备。
  • <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
  • io_addr<I/O地址> 设置网络设备的I/O地址。
  • irq<IRQ地址> 设置网络设备的IRQ。
  • media<网络媒介类型> 设置网络设备的媒介类型。
  • mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
  • metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
  • mtu<字节> 设置网络设备的MTU。
  • netmask<子网掩码> 设置网络设备的子网掩码。
  • tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
  • up 启动指定的网络设备。
  • -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
  • -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
  • -promisc 关闭或启动指定网络设备的promiscuous模式。
  • [IP地址] 指定网络设备的IP地址。
  • [网络设备] 指定网络设备的名称。

实例

显示网络设备信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# ifconfig        
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)

启动关闭指定网卡

1
2
# ifconfig eth0 down
# ifconfig eth0 up

为网卡配置和删除IPv6地址

1
2
3
# ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡诶之IPv6地址

# ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址

用ifconfig修改MAC地址

1
2
3
4
5
# ifconfig eth0 down //关闭网卡
# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
# ifconfig eth0 up //启动网卡
# ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
# ifconfig eth1 up //启动网卡

配置IP地址

1
2
3
4
5
6
# ifconfig eth0 192.168.1.56 
//给eth0网卡配置IP地址
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 给eth0网卡配置IP地址,并加上子掩码
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址

启用和关闭ARP协议

1
2
# ifconfig eth0 arp  //开启
# ifconfig eth0 -arp //关闭

设置最大传输单元

1
2
# ifconfig eth0 mtu 1500 
//设置能通过的最大数据包大小为 1500 bytes

Ping

ping ip地址:检查目标主机连接是否正常

ping 本地ip:检查本地ip是否正常。(一般127.0.0.1是本地回环地址,用了检查本机网卡是否正常,localhost)

ping用来检查计算机间网络是否通畅,数值越大,速度越慢,ping一下计算机看是否开着

Linux ping命令用于检测主机。

执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

语法

1
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

参数说明

  • -d 使用Socket的SO_DEBUG功能。
  • -c<完成次数> 设置完成要求回应的次数。
  • -f 极限检测。
  • -i<间隔秒数> 指定收发信息的间隔时间。
  • -I<网络界面> 使用指定的网络接口送出数据包。
  • -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
  • -n 只输出数值。
  • -p<范本样式> 设置填满数据包的范本样式。
  • -q 不显示指令执行过程,开头和结尾的相关信息除外。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
  • -R 记录路由过程。
  • -s<数据包大小> 设置数据包的大小。
  • -t<存活数值> 设置存活数值TTL的大小。
  • -v 详细显示指令的执行过程。

实例

检测是否与主机连通

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ping www.w3cschool.cc //ping主机
PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms

--- aries.m.alikunlun.com ping statistics ---
10 packets transmitted, 30 received, 0% packet loss, time 29246ms
rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms

//需要手动终止Ctrl+C

指定接收包的次数

1
2
3
4
5
6
7
8
9
10
# ping -c 2 www.w3cschool.cc
PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms

--- aries.m.alikunlun.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms

//收到两次包后,自动退出

多参数使用

1
2
3
4
5
6
7
8
9
10
11
12
# ping -i 3 -s 1024 -t 255 g.cn //ping主机
PING g.cn (203.208.37.104) 1024(1052) bytes of data.
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms

--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6001ms
rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
[root@linux ~]#

//-i 3 发送周期为 3秒 -s 设置发送包的大小 -t 设置TTL值为 255

P47-52远程登录和复制文件(ssh)

ssh:

Security shell, 数据传输加密,压缩

ssh [-p port] user@remote

user是远程机器上的用户名,如果不指定的话默认当前用户。

remote是远程机器的地址,可以是ip/域名,或者是后面会提到的别名。

port是ssh server的监听端口, 如果不指定,默认22.

windows下载:putty和xshell

使用exit退出用户登录

ip:ip是是分配给网络上使用IP协议的设备的数字标签。我们现在经常使用的是 ipv4, 由32位二进制数字组成,常以XXX.XXX.XXX.XXX形式表现。

域名:是由一串用“点”分隔的字符组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。如 i.cnblogs.com。

域名按域名系统(DNS)的规则流程组成。在DNS中注册的任何名称都是域名。域名用于各种网络环境和应用程序特定的命名和寻址目的。

域名和ip有区别也有联系,域名通常都会和IP绑定起来,通过访问域名来访问网络主机上的服务。ip地址通常是指主机,而域名通常表示一个网站。一个域名可以绑定到多个ip,多个域名也可以绑定到一个ip。

域名系统(DNS):因特网上作为域名和ip地址相互映射的分布式数据库,能使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址。通过主机名,最终得到该主机名对应的ip地址的过程叫做域名解析。 DNS协议运行在UDP协议之上,端口号53。

端口号:端口,(英语:port),主要分为物理端口和逻辑端口。我们一般说的都是逻辑端口,用于区分不同的服务。因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,标识是从065535。**端口号分为公认端口(01023)、注册端口(102449151)和动态端口(4915265535)。**我们自己的服务一般都绑定在注册端口上。

跨域:在 HTML 中,,, ,, , 等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

常见的端口号及其用途

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
一些常见的端口号及其用途如下:
21端口:FTP 文件传输服务(常用)
22端口:SSH 端口(常用)
23端口:TELNET 终端仿真服务
25端口:SMTP 简单邮件传输服务
53端口:DNS 域名解析服务
80端口:HTTP 超文本传输服务,web端口(常用)
110端口:POP3 “邮局协议版本3”使用的端口
443端口:HTTPS 加密的超文本传输服务(常用)
1433端口:MS SQL*SERVER数据库 默认端口号
1521端口:Oracle数据库服务
1863端口:MSN Messenger的文件传输功能所使用的端口
3306端口:MYSQL 默认端口号(常用)
3389端口:Microsoft RDP 微软远程桌面使用的端口
5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口
5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口
5000端口:MS SQL Server使用的端口
8000端口:腾讯QQ

SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。

ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)

ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接

SSH的工作机制

服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。

SSH的加密技术

加密技术:传输过程,数据加密。
1.SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码
2.SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。
SSH2支持RSA和DSA密钥
DSA:digital signature Algorithm 数字签名
RSA:既可以数字签名又可以加密

SSH知识小结

1.SSH是安全的加密协议,用于远程连接Linux服务器
2.SSH的默认端口是22,安全协议版本是SSH2
3.SSH服务器端主要包含2个服务功能SSH连接和SFTP服务器
4.SSH客户端包含ssh连接命令和远程拷贝scp命令等

如何防止SSH登录入侵

1.密钥登录,更改端口
2.牤牛阵法
3.监听本地内网IP(ListenAddress 192.168.25.*)

SSH功能大全

1
1.登录          ``    ``ssh` `-p22 omd@192.168.25.137        ``  ``2.直接执行命令 -->最好全路径          ``    ``ssh` `root@192.168.25.137 ``ls` `-ltr ``/backup/data`            `      ``==>``ssh` `root@192.168.25.137 ``/bin/ls` `-ltr ``/backup/data`        `  ``3.查看已知主机           ``    ``cat` `/root/``.``ssh``/known_hosts``  ``4.``ssh``远程执行``sudo``命令``    ``ssh` `-t omd@192.168.25.137 ``sudo` `rsync` `hosts ``/etc/` `  ``5.``scp`        `       ``1.功能  -->远程文件的安全(加密)拷贝          ``         ``scp` `-P22 -r -p ``/home/omd/h``.txt omd@192.168.25.137:``/home/omd/`        `       ``2.``scp``知识小结          ``         ``scp``是加密远程拷贝,``cp``为本地拷贝          ``         ``可以推送过去,也可以拉过来          ``         ``每次都是全量拷贝(效率不高,适合第一次),增量拷贝用``rsync` `  ``6.``ssh``自带的``sftp``功能        ``       ``1.Window和Linux的传输工具          ``         ``wincp  filezip          ``        ``sftp` `-->基于``ssh``的安全加密传输          ``        ``samba  ``       ``2.``sftp``客户端连接          ``        ``sftp` `-oPort=22 root@192.168.25.137          ``        ``put ``/etc/hosts` `/tmp`          `        ``get ``/etc/hosts` `/home/omd`  `      ``3.``sftp``小结:          ``        ``1.linux下使用命令: ``sftp` `-oPort=22 root@x.x.x.x          ``        ``2.put加客户端本地路径上传          ``        ``3.get下载服务器端内容到本地          ``        ``4.远程连接默认连接用户的家目录

ssh常见命令参数

1
usage: ``ssh` `[-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]``      ``[-D [bind_address:]port] [-e escape_char] [-F configfile]``      ``[-i identity_file] [-L [bind_address:]port:host:hostport]``      ``[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]``      ``[-R [bind_address:]port:host:hostport] [-S ctl_path]``      ``[-W host:port] [-w local_tun[:remote_tun]]``      ``[user@]``hostname` `[``command``]

关于后台ssh服务的相关

1
# 查询openssl软件``  ``rpm -qa openssh openssl``# 查询sshd进程``  ``ps` `-ef | ``grep` `ssh``    ``--> ``/usr/sbin/sshd``# 查看ssh端口``  ``netstat` `-lntup | ``grep` `ssh` `  ``ss | ``grep` `ssh`        `(效果同上,同下,好用)``  ``netstat` `-a | ``grep` `ssh``(记住这个)``  ``netstat` `-lnt | ``grep` `22  ==> 查看22端口有没有开``/ssh``服务有没有开启``  ``技巧: ``netstat` `-lnt | ``grep` `ssh` `| ``wc` `-l -->只要大于2个就是``ssh``服务就是好的``# 查看ssh的秘钥目录``  ``ll ``/root/``.``ssh``/known_hosts` `# 当前用户家目录的.ssh目录下``# ssh的配置文件``  ``cat` `/etc/ssh/sshd_config`  `# ssh服务的关闭``  ``service sshd stop``# ssh服务的开启:``  ``service sshd start``# ssh服务的重启``  ``service sshd reload  [停止进程后重启] ==> 推荐``  ``service sshd restart  [干掉进程后重启] ==> 不推荐``# ssh远程登录``  ``ssh` `192.168.1.100   ``# 默认利用当前宿主用户的用户名登录``  ``ssh` `omd@192.168.1.100 ``# 利用远程机的用户登录``  ``ssh` `omd@192.168.1.100 -o stricthostkeychecking=no ``# 首次登陆免输yes登录``  ``ssh` `omd@192.168.1.100 ``"ls /home/omd"` `# 当前服务器A远程登录服务器B后执行某个命令``  ``ssh` `omd@192.168.1.100 -t ``"sh /home/omd/ftl.sh"` `# 当前服务器A远程登录服务器B后执行某个脚本

image

ssh免密设置

1、进入用户的家目录

1
[root@localhost ~]``# cd /root/.ssh/       【root用户就在root目录下的.ssh目录】``[root@localhost ~]``# cd /home/omd/.ssh/  【普通用户就是在家目录下的.ssh目录】

image

2、根据DSA算法生成私钥和公钥【默认建立在当前用户的家目录】

1
[root@localhost .``ssh``]``# ssh-keygen -t dsa   # 一路回车即可``        ``id_dsa     -->私钥(钥匙) ``        ``id_dsa.pub   -->公钥(锁)

image

3.拷贝公钥给目标服务器

1
[root@localhost .``ssh``]``# ssh-copy-id -i id_dsa.pub omd@192.168.25.110       【 使用ssh登录的默认端口22】``[root@localhost .``ssh``]``# ssh-copy-id -i id_dsa.pub –p 666 omd@192.168.25.120  【使用ssh登录设置的端口666】

img

\4. 查看目标服务器生成的文件

1
[omd@localhost .``ssh``]$ ll ``/home/omd/``.``ssh``/authorized_keys

image

\5. 免密码登录目标服务器

1
ssh` `omd@192.168.25.110

\6. 总结一下钥匙和锁的关系

1
1.多个钥匙开一把锁``   ``把id_dsa.pub 复制给各个服务器` `2.一个钥匙开duobasuo``   ``把id_dsa 传给各个服务器``   ``把id_dsa 传给自己

ssh排查问题

1
2
3
4
5
6
1.判断物理链路是否通 ``ping` `192.168.25.130   线路 | 防火墙 | 是否同一个网的``      ``ping`  `本身是icmp协议``2.判断服务是否正常
telnet 192.168.25.130 22
3.Linux防火墙
service iptables status ==> ``/etc/init``.d``/iptables` `status  
4.打开``ssh``的调测进行观察
ssh` `-vvv omd@192.168.1.100

SSH批量分发与管理方案小结

1.利用root做ssh key验证

优点:简单,易用
缺点:安全性能差,无法禁止root远程连接

2.利用普通用户omd –>推荐

思路:把要分发的文件拷贝到服务器用户的家目录,然后利用sudo提权拷贝分发的文件和对应目录
优点:安全
缺点:复杂,配置麻烦
1.sudo提权
echo ‘omd All=(All) NOPASSWD:/usr/bin/rsync’ >> /etc/sudoers
visudo -c
grep omd /etc/sudoers
2.ssh分发到服务器的家目录
ssh -p22 -r /etc/hosts omd@192.168.25.137:~
3.ssh使用sudo复制到目标服务器的/etc
ssh -t omd@192.168.25.137 sudo rsync hosts /etc/

3.拓展方案2,不用sudo,而是设置suid对固定命令提权

优点:相当安全
缺点:复杂,安全性较差,任何人都可以处理带有suid权限的命令
1.which rsync
2.chmod 4755 /usr/bin/rsync

ssh章节小结

1.ssh远程的加密连接协议,相关软件openssh,openssl
2.默认端口22
3.ssh版本协议
4.服务器ssh连接,ftp连接,sshd守护进程,开机启动
5.ssh客户端重要命令:ssh(用户登录&&远程命令),scp,sftp,
6.安全验证方式:口令,密钥 学习原理
7.ssh服务优化:改端口,改监听,no root,no empty,no DNS,
8.ssh密钥对,公钥在服务器端,私钥在客户端

修改ssh服务的启动文件sshd的几个点

1
1-1修改 ``/etc/ssh/sshd_config``     GSSAPIAuthentication ``yes`  `解决一台服务器管理多个``ssh``服务``  ``UseDNS no 加快响应速度因为在内网环境下``  ``PermitRootLogin no 不运行root用户直接登录``  ``Port 11544 更改访问端口号``  ``ListenAddress 192.168.25.130 只监听内网的IP``  ``Match User anoncvs   当前环境允许登录的用户``  ``PermitRootLogin no   是否允许root用户登录,一般不允许开``1-2重启服务``  ``service sshd restart    写入命令进内存``  ``service sshd reload(优先) reload是一个平滑的访问,不影响用户使用``1-3查看连接端口``  ``netstat` `-an | ``grep` `EST

SSH跳过HostKeyChecking,不用输入yes

SSH跳过输入ssh跳过RSA key fingerprint输入yes/no

在配置大量的节点之间需要ssh连通的时候,如果自动复制很多节点,都需要输入yes,两两节点之间都要互通一次,这样会造成很大的麻烦

解决1;修改配置文件/etc/ssh/ssh_config

1
找 到 # StrictHostKeyChecking ask ``修改为:StrictHostKeyChecking ``no

解决2: 添加参数 –o 【o=option】

1
ssh root@192.168.25.133 -o ``"StrictHostKeyChecking no"

img

1
scp -o ``"StrictHostKeyChecking no"` `newfile.txt `"mailto:root@192.168.25.133:/root"``>root@192.168.25.133:/root

img

P53-55远程登录和复制文件(scp)

scp:secure copy

指定端口-P port:注意是大写的P, port是指定数据传输用到的端口号(常用)

Linux scp 命令用于 Linux 之间复制文件和目录。

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

语法

1
2
3
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2

简易写法:

1
scp [可选参数] file_source file_target

参数说明:

  • -1: 强制scp命令使用协议ssh1
  • -2: 强制scp命令使用协议ssh2
  • -4: 强制scp命令只使用IPv4寻址
  • -6: 强制scp命令只使用IPv6寻址
  • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
  • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -q: 不显示传输进度条。
  • -r: 递归复制整个目录。(常用)
  • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
  • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
  • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
  • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
  • -P port:注意是大写的P, port是指定数据传输用到的端口号(常用)
  • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

实例

1、从本地复制到远程

命令格式:

1
2
3
4
5
6
7
scp local_file remote_username@remote_ip:remote_folder 
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
  • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
  • 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

应用实例:

1
2
3
4
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3

复制目录命令格式:

1
2
3
scp -r local_folder remote_username@remote_ip:remote_folder 
或者
scp -r local_folder remote_ip:remote_folder
  • 第1个指定了用户名,命令执行后需要再输入密码;
  • 第2个没有指定用户名,命令执行后需要输入用户名和密码;

应用实例:

1
2
scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ 
scp -r /home/space/music/ www.runoob.com:/home/root/others/

上面命令将本地 music 目录复制到远程 others 目录下。

2、从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例

应用实例:

1
2
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
scp -r www.runoob.com:/home/root/others/ /home/space/music/

说明

1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:

1
2
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator

2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

(scp remote to local):

1
scp -r XXX@atlas.cselabs.umn.edu:~/Desktop/p3-code ~/Desktop:

(scp local to remote):

1
scp -r  ~/Desktop/C++CODE xxx@ipaddress: ~/Desktop

df -h:查看磁盘容量

Windows没有scp命令,需要安装PuTTy,用pscp命令或者安装FileZilla使用FTP进行文件传输。

P56-59(ssh高级)

免密码登录和配置别名

ssh配置都在用户家目录下的.ssh目录下

ls -alh, 找到.ssh隐藏文件,如何cd进入,然后ls -alh看known_hosts,可以看到已经有的连接。

免密码登录:

步骤:1. 配置公钥: ssh-keygen即可生成ssh钥匙,一路回车即可

​ 2.上传公钥到服务器:ssh-copy-id -p port user@remote, 可以让服务器记住公钥。

ssh是什么?ssh (SSH client) is a program for logging into a remote machine and for executing commands on a remote machine. (自己翻译哈)

讲ssh服务的用法之前得需要知道这个服务是否已经开启

查看ssh服务是否开启的命令:systemctl status sshd。输入这个命令之后,会得到如下的一个提示

img

第二行最后一个单词disabled表示sshd服务开机不自动启动

第三行inactive(dead)表示sshd服务当前是关闭的

现在我们来开启sshd服务,输入systemctl start sshd,然后再输入systemctl status sshd查看结果

img

现在我们可以看到第三行是active(running),这表示sshd服务当前是开启的,但仍然是开机不启动。不过,这并不影响我们使用sshd,至于如何管理这些服务,并不在我们本节讨论范围内。

ssh可以干什么,举个例子,我现在有个朋友电脑出了点问题,但是现在他在北京,我在西安 ,为给他修个电脑,我不划算去北京吧,怎么办?用ssh。

首先得知道他的ip地址,然后登录他的root用户,用命令:ssh root@...** 星号代表ip

img

输入完命令后,会有一个提示,问你是否确信连接?输入yes,再然后输入他root的密码,就进入他的电脑了。但这样有个不好的地方,我知道了他root的密码,那以后岂不是可以在他的电脑上为所欲为了,这样他肯定是不愿意的,我要是不小心删掉了他珍藏多年的种子,他肯定会杀了我。

######我现在是他的身份#####

那在这种情况下,他应该怎么办?(ps:我现在以他的身份来做)可以先给自己的电脑上一把锁,然后需要进入你电脑的人一把钥匙,你不想让别人进的时候把锁删掉就行了。那具体怎么做呢?

第一步:删除/root/.ssh/下的所有东西,如果没有.shh文件夹,建立一个。

第二步:在.ssh文件夹下,建立钥匙,使用命令ssh-keygen

img

输入命令后,第一个提示问你存在哪里,默认就好,直接回车。第二个问题让你输入一个密码,这个密码就是以后别人在拥有私钥的情况下,进入你主机需要的密码。输入完再输入一次,就会生成一个钥匙跟一把锁。

img

id_rsa叫私钥,也就是钥匙,id_rsa.pub叫公钥。

第三步:用锁来锁定本机的哪个用户,以root为例,命令是ssh-copy-id root@...** id为本机的id。回车之后会提示你是否连接?回答yes就行,然后会提示你输入要锁定用户的密码,现在要锁定root ,那就输入root密码就行。

第四步:谁想连本机,把私钥发给谁就行,比如说,我发给一个叫playsand的用户。命令是:

scp id_rsa playsand@...**:/home/playsand/.ssh 这个星号代表的是playsand用户的id,后面代表的是存储路径,一定要在playsand下建立一个.ssh目录,如果有,则将里面内容清空。

#####现在我是playsand用户#####

在自己的.ssh目录下,输入ssh root@...** id是root的id,回车之后会提示你是否连接?回答yes,然后会提示输入密码,这个密码就是上面第二步设定的密码,输入之后,就进入了。如果输入错了,系统会提示你输入root的密码,同样,输入root密码也可以进入,这就跟刚开始一样。

#####现在我是root用户####

在这里有几个小小的设置:

1.让别人登录自己的root用户是件很危险的事,怎么能让别人怎么都登录不了自己的root用户呢;

编辑ssh_config文件(vim /etc/ssh/ssh_config),将#PermitRootLogin yes改成PermitRootLogin no(大约在48行),推出保存之后,重启以下ssh服务(systemctl reload sshd)

2.要是不认识的人或者有恶意的人不小心得到了私钥和密码,对于本机来说很危险,可以设置白名单,让指定的人可以登录;

同样vim /etc/ssh/ssh_config,找一个空行写下:allowusers 指定用户名,这样只有指定的用户可以登录本机。e.g:allowusers playsand 就是允许playsand用户登录,其他用户都登录不了,同理,重启下ssh服务。

3.让别人知道登录自己的root密码或者用户密码总是不安全的,怎样让别人只能通过私钥密码登录?

同样vim /etc/ssh/ssh_config,将passwordAuthentication yes 改成passwordAuthentication no ,这样,别人只能通过私钥密码登录本机。修改完重启ssh服务。

使用ssh登录服务器的时候,需要输入ip地址、端口、用户名、密码等信息,比较麻烦,容易输错。还好,通过客户端和服务器的配置参数,可实现免密码快速登录。服务器可通过保存客户端的公钥,用于验证客户端的身份,从而省去输入密码的步骤。客户端也可通过配置服务器参数来简化登录命令。
本文主要是记录了ssh面密码快速登录的配置过程,主要分为以下几个步骤。

  1. 客户端生成密钥,包括私钥和公钥。
  2. 在服务器中配置客户端的公钥。
  3. 在客户端配置服务器登录相关参数。

本文示例中的服务器ip地址为192.168.1.1,ssh端口为22。

客户端生成密钥

客户端生成密钥的方法很简单,只需要使用ssh-keygen命令。

1
ssh-keygen -t rsa

生成密钥过程中,建议采用默认值,只需要按三次回车之后,就会再~/.ssh目录下生成密钥文件,其中,id_rsa为私钥,id_rsa.pub为公钥。

服务器配置

服务器的~/.ssh/authorized_keys文件保存可快速连接的客户端的公钥。只需把客户端生成的id_rsa.pub文件的内容拷贝到authorized_keys文件的末尾。拷贝的方法有:

  1. 直接拷贝。由于id_rsa.pub和authorized_keys都是文本文件,可通过拷贝命令直接拷贝。
  2. 把id_rsa.pub上传到服务器,然后再把内容添加到authorized_keys文件中。
    在客户端把文件上传到服务器的用户目录的操作命令如下:
1
scp ~/.ssh/id_rsa.pub root@192.168.1.1:

在服务器操作的命令如下:

1
cat id_rsa.pub >> ~/.ssh/authorized_keys

配置好之后,登录服务器就不再需要密码了。

在客户端配置服务器登录相关参数

除了密码之外,登录时,还需要配置ip地址、端口、用户等信息,也比较繁琐。可通过客户端的~/.ssh/config配置服务器的相关参数简化登录命令。
config文件的配置内容如下:

1
2
3
4
Host server
Hostname 192.168.1.1
Port 22
User bingoli

其中,Host为服务器的名称,输入登录命令时使用,后续登录只需要记住这个名字就可以;Hostname为服务器的ip地址;Port为ssh的端口;User为服务器的用户名。配置好相关参数之后,就可以使用简化的命令登录服务器了。

1
ssh server

配置别名

在本地.ssh文件夹下vi config,然后

Host school

​ HostName ip地址

​ User xxxx

​ Port 22