首页 > 系统相关 >Linux_4 ssh

Linux_4 ssh

时间:2024-02-19 14:26:51浏览次数:32  
标签:Linux 文件夹 ssh myserver 服务器 lesson homework

title:(在线学习平台) link:(https://www.acwing.com/) cover:(https://cdn.acwing.com/media/activity/surface/log.png)

ssh登录

作用

  • 在开发时,通常会用Terminal通过ssh登录到每个服务器里,打开服务器终端,以进行开发,通常来说,一个服务器会给出如下的几个信息:
host
IP
password

登录服务器

  • 基本格式:ssh user@hostname

    • user:用户名
    • hostname:IP地址/域名
  • 如果是第一次登录的时候,会有提示,输入yes,输入密码,即可登录,密码输入时不显示。

    • 输入exit/ctrl+d/logout即可退出
    • 当输入yes时,会将服务器信息存入ssh文件夹中的known_hosts文件(~/.ssh/known_hosts),再次登录就无需验证Yes

修改端口号

  • 默认端口号为22,修改端口号的基本命令格式为:ssh user@hostname -p 22

配置文件

  • 通过配置文件的方式给服务器账号配置别名,用短字符串替代长字符串

# 在根目录下有
~/.ssh/config
# 没有的话可以创建一个名为config的文件

# 在其中编写:
Host 别名
    HostName IP地址/域名
    User     用户名
    port     默认情况下,如果不写即为22

# 当有多个服务器时,可以配置多个服务器账号,格式如下:

Host myserver1
...
Host myserver2
...

# 之后再使用服务器时,可以直接使用别名myserver1、myserver2

免密登录

# 创建密钥
ssh-keygen

# 一直回车后,在~/.ssh中出现了两个文件
id_rsa 密钥
id_rsa.pub 公钥

# 密钥与公钥是唯一配对的一对,生成之后,想要免密登录到哪个服务器,即将公钥传到哪个服务器即可
cat id_rsa.pub
ctrl + insert
# 登录到想要免密登录的服务器,在其中创建~/.ssh文件夹,创建新文件authorized_keys,将内容复制进去即可
mkdir ~/.ssh
cd ~/.ssh
vim authorized_keys
shift + insert
# 当有多个密钥时需用空格隔开

# 也可以使用如下命令一键添加公钥
ssh-copy-id 服务器名称

执行命令

  • 当实现自动化运维时,需要执行一些基本的操作,通过使用执行命令,来让服务器执行一些基本的自动化格式命令

# 基本格式
ssh user@hostname command
ssh user@hostname ls -a

# 同样的,执行命令可以执行一个for循环,ssh会将执行命令的标准输出重定向到当前终端中
# 单引号中的$i可以求值,会被解析,在本地服务器不会解析,传过去的就是 $i
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'
# 双引号中的$i不可以求值,不会被解析,因为在本地服务器已经解析了
ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done"

# 补充讲解

# 案例1
# 双引号中的字符串命令会取到本地的值,单引号中的字符串命令不会取到本地的值,会原封不动的传到服务器端
name=aa
ssh myserver "echo $name" # 输出aa,本地有name的值,传过去的是echo aa
ssh myserver 'echo $name' # 输出为空,服务器端没有name的值
ssh myserver 'echo \$name' # 输出$name,转义了不取值

# 案例2
ssh myserver 'for ((i=1;i<=10;i++)) do echo $i; done' # 服务器输出1-10,本地不解析
ssh myserver "for ((i=1;i<=10;i++)) do echo $i; done" # 输出为空,本地解析但没有定义i的值
ssh myserver "for ((i=1;i<=10;i++)) do echo \$i; done" # 服务器输出1-10,原封不动传过去

# 总结
# 单引号中 $x 可以取得语句命令中的 x 值 – 如果使用双引号的话可以加转义
# 双引号中 $x 可以取到语句命令外的 x 值

scp传文件

  • 实现不同文件之间传文件
# 基本命令:将source路径下的文件复制到destination中
scp source destination

# 同样的一次可以复制多个文件
scp source1 source2 destination

复制文件夹

  • 基本命令:scp -r
    • -r 一定要放在source与destination前面
    • 对于某一个位置的地址,一般格式为:myserver: 后面接的是相对于服务器账号的家目录,可以是绝对路径/相对路径
      scp -r ~/tmp myserver:/home/acs/

服务器与服务器之间进行文件传输

  • 一般模式为:服务器1->本地服务器->服务器2
  • 两个服务器之间也可以进行直接传输,但是需要相互之间完整授权

scp复制的两个方向

# 去:从本地家目录下的tmp文件夹复制到myserver服务器的/home/acs文件夹下
scp -r ~/tmp myserver:/home/acs

# 来:将服务器的文件夹复制到本地的dir文件夹
scp -r myserver:/var/lib/locales/supported.d ./dir

scp指定服务器端口号

# P大写,且P放在source和destination之前
scp -P xx source destination

使用scp配置一个毛坯服务器

# 配置一个毛坯服务器,需要装饰的东西,也就是vim与tmux

# 将.vimrc与.tmux.conf复制到服务器对应的目录下
# 位置在初始的Terminal中输入ls -a即可找到
ssh .vimrc .tmux.conf myserver
scp ~/.vimrc ~/.tmux.conf myserver:

# tmux如果不生效则重新加载
tmux list-sessions
tmux kill-server
tmux

tmux source ~/.tmux.conf

习题


# 获取ssh教程配套的远程服务器账号的信息
homework 4 getinfo
User: acs_1245
HostName: 123.57.67

# 创建好作业后,先进入文件夹/home/acs/homework/lesson_4/,然后:
homework 4 create
cd /home/acs/homework/lesson_4/

(0) 进入homework_0文件夹,要求:
    [1] 该文件夹内容为空
	
	cd homework_0
	rm * -r
	
    [2] 配置服务器账号的密钥登陆方式。服务器信息可以通过如下命令获得:
        homework 4 getinfo
        将服务器账号的名称(Host)配置成:myserver
	# 配置名称
	vim ~/.ssh/config
	Host myserver
		HostName IP地址或域名
		User 用户名

	# 密钥登陆方式1
	ssh-keygen
	cat ~/.ssh/id_rsa.pub
	ctrl+a z
	set:nonu
	ctrl+insert
	ssh myserver
	vim ~/.ssh/authorized_keys
	:set paste
	shift+insert

	# 密钥登录方式2
	ssh-copy-id myserver

(1) 进入homework_1文件夹,下列描述中的“本地”均表示当前文件夹。要求:
    [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_1/
	
	cd ../homework_1
	ssh user@hostname
	cd ~/homework/lesson_4/homework_1/
	rm * -r
	
    [2] 将本地的main.cpp文件上传到myserver中的~/homework/lesson_4/homework_1/目录中。
	
	scp main.cpp myserver:~/homework/lesson_4/homework_1/
	
    [3] 在本地创建文件夹dir。
	
	mkdir dir
	
    [4] 将myserver中的/etc/lsb-release文件复制到dir中。
	
	scp -r myserver:/etc/lsb-release ./dir
	

(2) 进入homework_2文件夹,下列描述中的“本地”均表示当前文件夹,要求:
    [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_2/
	
	cd ../homework_2
	ssh myserver
	cd ~/homework/lesson_4/homework_2/
	rm * -r
	
    [2] 将本地的dir文件夹上传到myserver中的~/homework/lesson_4/homework_2/目录中。
	
	scp -r ./dir myserver:~/homework/lesson_4/homework_2/
	

(3) 进入homework_3文件夹,下列描述中的“本地”均表示当前文件夹,要求:
    [1] 在本地创建文件夹dir。
	
	cd ../homework_3
	mkdir dir
	
    [2] 将myserver中的/var/lib/locales/supported.d文件夹下载到本地dir文件夹中。
	
	scp -r myserver:/var/lib/locales/supported.d dir
	

(4) 进入homework_4文件夹,编写脚本remote_mkdir.sh和remote_rmdir.sh,要求:

scp remote_mkdir.sh remote_rmdir.sh myserver:~/homework/lesson_4/homework_4/
# 并非传输文件过去执行,而是在本地执行这些命令

    [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_4/
	
	ssh myserver
	mkdir ~/homework/lesson_4/homework_4/
	cd ~/homework/lesson_4/homework_4/
	rm * -r
	
    [2] 本地目录下仅包含remote_mkdir.sh和remote_rmdir.sh
	
	cd ../homework_4
	rm * -r
	vim remote_mkdir.sh
	vim remote_rmdir.sh
	
    [3] remote_mkdir.sh和remote_rmdir.sh具有可执行权限
	
	chmod +x remote_mkdir.sh
	chmod +x remote_rmdir.sh
	
    [4] remote_mkdir.sh接收一个传入参数。格式为 ./remote_mkdir.sh directory_name
        该操作可以在myserver服务器上的~/homework/lesson_4/homework_4/目录下,创建一个名为directory_name的文件夹
	# 单引号中 $x 可以取得语句命令中的 x 值 – 如果使用双引号的话可以加转义
	# 双引号中 $x 可以取到语句命令外的 x 值
	
	vim remote_mkdir.sh
	
	#! /bin/bash
	# mkdir / -p 创建一系列的文件夹,-p有就跳过没有就创建
	ssh myserver "mkdir -p ~/homework/lesson_4/homework_4/\"$1\""
	ssh myserver 'mkdir -p ~/homework/lesson_4/homework_4/$1'
	
    [5] remote_rmdir.sh接收一个传入传输。格式为 ./remote_rmdir.sh directory_name
        该操作可以将myserver服务器上的~/homework/lesson_4/homework_4/目录下的名为directory_name的文件夹删掉。
	# 单引号中 $x 可以取得语句命令中的 x 值 – 如果使用双引号的话可以加转义
	# 双引号中 $x 可以取到语句命令外的 x 值
	
	vim remote_rmdir.sh
	
	#! /bin/bash
	# rm * -r
	ssh myserver "rm -r ~/homework/lesson_4/homework_4/\"$1\""
	ssh myserver 'rm -r ~/homework/lesson_4/homework_4/$1'
	
    [6] 注意:传入的文件参数可能包含空格。两个脚本均不需要判断传入参数的合法性。
	# 可能包含空格,因此需要使用引号引上

标签:Linux,文件夹,ssh,myserver,服务器,lesson,homework
From: https://www.cnblogs.com/jia-ming/p/18020984

相关文章

  • 在windows下打包linux可执行文件
    尝试set命令设置环境变量,然后执行打包,但是打包出来还是windows文件命令行直接设置:在运行 gobuild 命令之前,在同一命令行窗口中先设置环境变量,并确保在同一行内设置以确保它们在同一环境中生效CGO_ENABLED=0GOOS=linuxGOARCH=amd64gobuild-omyapp-linux-amd64main.go......
  • linux 中 read -a 和 -r选项
     001、-a:  后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。[root@pc1test1]#read-aay1##-a数据读入数组变量aabbcc100800[root@pc1test1]#echo$ay1aa[root@pc1test1]#echo${ay1[@]}##输出数组的所有元素aab......
  • 禅道(一键安装包Linux版本)出现磁盘(/opt)空间不足的问题
    场景公司管理bug用到了禅道,但是为了方便我们就使用了禅道官网提供的一键安装包Linux版本。禅道官方下载地址:https://www.zentao.net/download.html 问题有一点美中不足的是禅道官方提供的一键安装版本(Linux)只能放在/opt文件夹下面。随着项目越来越多我们/opt容量达到100%了,接......
  • Linux、Centos下显示隐藏分区及挂载
    显示隐藏的分区分三步,1、分区,2、格式化,3、挂载1、分区(1)、先查看分区情况:fdisk-l第一个红框内显示的时总磁盘大小,下面的是分出的4个盘,加起来的大小如果没有sda的大,就说明有预留的空间(预留空间最好别动)或是有隐藏的没显示,或是物理机加了硬盘还没挂载。 (2)、对sda进行分区:fdi......
  • linux shell 中双方引号和单方引号的区别
     通常更推荐使用双方引号。 001、双方引号可以避免变量的单词分割[root@pc1test1]#str1="aabb"##测试字符串[root@pc1test1]#if[[$str1=="aabb"]];thenecho"yes";fi##双边引号不用担心变量的单词分割yes[root@pc1test1]#if[$str1=......
  • 一、在树莓派上学习C#和Linux:常用指令和软件包管理
    在树莓派上学习C#和Linux:常用指令和软件包管理最近AI特别火,就想在空余时间系统性的学习一下Linux中使用C#操作硬件开发。选择了树莓派平台入手学习。它是一款小巧的单板计算机,运行基于Linux的操作系统。学习Linux命令是管理和使用树莓派的关键一步。这篇博客记录一些常用的Linux......
  • LInux下curl命令踩坑
    遇到的问题curl:(60)Peer'scertificateissuerhasbeenmarkedasnottrustedbytheuser.解决方案:加上-v查看详细信息,加上-k(跳过SSL检测)可以解决。URIError:URImalformed解决方案:加上-O(将服务器响应保存成文件,并将URL的最后部分当作文件名)可以解决。参考c......
  • Linux下tar命令简单使用
    简单使用tar-cfabc.tar/abc#创建归档文件tar-xfabc.tar#解包归档文件tar-czfabc.tar.gz/abc#创建压缩归档文件tar-xzfabc.tar.gz#解压文件tar-zxzfabc.tar.gz#解压文件并显示执行过程unzipabc.zip#解压文件unzip-da......
  • Window10 通过 SSH 访问 Docker 容器
    参考https://zhuanlan.zhihu.com/p/462481693https://blog.csdn.net/piaopu0120/article/details/120550181https://blog.csdn.net/qq_27865227/article/details/121649574https://blog.csdn.net/fighterandknight/article/details/124478429环境软件/系统版本说明......
  • linux系统查看磁盘分区的文件系统类型
    df-T只可以查看已经挂载的分区和文件系统类型。[root@192~]#df-Tfdisk-l可以显示出所有挂载和未挂载的分区,但不显示文件系统类型。parted-l可以查看未挂载的文件系统类型,以及哪些分区尚未格式化。lsblk-f也可以查看未挂载的文件系统类型。最为直观file-s/......