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 | # ifconfig |
启动关闭指定网卡
1 | # ifconfig eth0 down |
为网卡配置和删除IPv6地址
1 | # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡诶之IPv6地址 |
用ifconfig修改MAC地址
1 | # ifconfig eth0 down //关闭网卡 |
配置IP地址
1 | # ifconfig eth0 192.168.1.56 |
启用和关闭ARP协议
1 | # ifconfig eth0 arp //开启 |
设置最大传输单元
1 | # ifconfig eth0 mtu 1500 |
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 | # ping www.w3cschool.cc //ping主机 |
指定接收包的次数
1 | # ping -c 2 www.w3cschool.cc |
多参数使用
1 | # ping -i 3 -s 1024 -t 255 g.cn //ping主机 |
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 | 一些常见的端口号及其用途如下: |
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后执行某个脚本 |
ssh免密设置
1、进入用户的家目录
1 | [root@localhost ~]``# cd /root/.ssh/ 【root用户就在root目录下的.ssh目录】``[root@localhost ~]``# cd /home/omd/.ssh/ 【普通用户就是在家目录下的.ssh目录】 |
2、根据DSA算法生成私钥和公钥【默认建立在当前用户的家目录】
1 | [root@localhost .``ssh``]``# ssh-keygen -t dsa # 一路回车即可`` ``id_dsa -->私钥(钥匙) `` ``id_dsa.pub -->公钥(锁) |
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】 |
\4. 查看目标服务器生成的文件
1 | [omd@localhost .``ssh``]$ ll ``/home/omd/``.``ssh``/authorized_keys |
\5. 免密码登录目标服务器
1 | ssh` `omd@192.168.25.110 |
\6. 总结一下钥匙和锁的关系
1 | 1.多个钥匙开一把锁`` ``把id_dsa.pub 复制给各个服务器` `2.一个钥匙开duobasuo`` ``把id_dsa 传给各个服务器`` ``把id_dsa 传给自己 |
ssh排查问题
1 | 1.判断物理链路是否通 ``ping` `192.168.25.130 线路 | 防火墙 | 是否同一个网的`` ``ping` `本身是icmp协议``2.判断服务是否正常 |
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" |
1 | scp -o ``"StrictHostKeyChecking no"` `newfile.txt `"mailto:root@192.168.25.133:/root"``>root@192.168.25.133:/root |
P53-55远程登录和复制文件(scp)
scp:secure copy
指定端口-P port:注意是大写的P, port是指定数据传输用到的端口号(常用)
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
语法
1 | scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] |
简易写法:
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 | scp local_file remote_username@remote_ip:remote_folder |
- 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
- 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
应用实例:
1 | scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music |
复制目录命令格式:
1 | scp -r local_folder remote_username@remote_ip:remote_folder |
- 第1个指定了用户名,命令执行后需要再输入密码;
- 第2个没有指定用户名,命令执行后需要输入用户名和密码;
应用实例:
1 | scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ |
上面命令将本地 music 目录复制到远程 others 目录下。
2、从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例
应用实例:
1 | scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 |
说明
1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
1 | #scp 命令使用端口号 4588 |
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。输入这个命令之后,会得到如下的一个提示
第二行最后一个单词disabled表示sshd服务开机不自动启动
第三行inactive(dead)表示sshd服务当前是关闭的
现在我们来开启sshd服务,输入systemctl start sshd,然后再输入systemctl status sshd查看结果
现在我们可以看到第三行是active(running),这表示sshd服务当前是开启的,但仍然是开机不启动。不过,这并不影响我们使用sshd,至于如何管理这些服务,并不在我们本节讨论范围内。
ssh可以干什么,举个例子,我现在有个朋友电脑出了点问题,但是现在他在北京,我在西安 ,为给他修个电脑,我不划算去北京吧,怎么办?用ssh。
首先得知道他的ip地址,然后登录他的root用户,用命令:ssh root@...** 星号代表ip
输入完命令后,会有一个提示,问你是否确信连接?输入yes,再然后输入他root的密码,就进入他的电脑了。但这样有个不好的地方,我知道了他root的密码,那以后岂不是可以在他的电脑上为所欲为了,这样他肯定是不愿意的,我要是不小心删掉了他珍藏多年的种子,他肯定会杀了我。
######我现在是他的身份#####
那在这种情况下,他应该怎么办?(ps:我现在以他的身份来做)可以先给自己的电脑上一把锁,然后需要进入你电脑的人一把钥匙,你不想让别人进的时候把锁删掉就行了。那具体怎么做呢?
第一步:删除/root/.ssh/下的所有东西,如果没有.shh文件夹,建立一个。
第二步:在.ssh文件夹下,建立钥匙,使用命令ssh-keygen
输入命令后,第一个提示问你存在哪里,默认就好,直接回车。第二个问题让你输入一个密码,这个密码就是以后别人在拥有私钥的情况下,进入你主机需要的密码。输入完再输入一次,就会生成一个钥匙跟一把锁。
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面密码快速登录的配置过程,主要分为以下几个步骤。
- 客户端生成密钥,包括私钥和公钥。
- 在服务器中配置客户端的公钥。
- 在客户端配置服务器登录相关参数。
本文示例中的服务器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文件的末尾。拷贝的方法有:
- 直接拷贝。由于id_rsa.pub和authorized_keys都是文本文件,可通过拷贝命令直接拷贝。
- 把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 | Host server |
其中,Host为服务器的名称,输入登录命令时使用,后续登录只需要记住这个名字就可以;Hostname为服务器的ip地址;Port为ssh的端口;User为服务器的用户名。配置好相关参数之后,就可以使用简化的命令登录服务器了。
1 | ssh server |
配置别名
在本地.ssh文件夹下vi config,然后
Host school
HostName ip地址
User xxxx
Port 22