- A+
所属分类:linux技术
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可以求值,会被解析 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"
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 # 创建好作业后,先进入文件夹/home/acs/homework/lesson_4/,然后: homework 4 create cd /home/acs/homework/lesson_4/ (0) 进入homework_0文件夹,要求: [1] 该文件夹内容为空 [2] 配置服务器账号的密钥登陆方式。服务器信息可以通过如下命令获得: homework 4 getinfo 将服务器账号的名称(Host)配置成:myserver # 文件夹内容为空 cd homework_0 rm * -r # 配置名称 vim ~/.ssh/config Host myserver HostName IP地址或域名 User 用户名 # 密钥登陆方式1 ssh-keygen cat ~/.ssh/id_rsa.pub ctrl+insert homework 4 getinfo ssh user@hostname password: vim ~/.ssh/authorized_keys shift+insert # 密钥登录方式2 ssh-copy-id myserver (1) 进入homework_1文件夹,下列描述中的“本地”均表示当前文件夹。要求: [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_1/ [2] 将本地的main.cpp文件上传到myserver中的~/homework/lesson_4/homework_1/目录中。 [3] 在本地创建文件夹dir。 [4] 将myserver中的/etc/lsb-release文件复制到dir中。 cd ../homework_1 ssh user@hostname cd ~/homework/lesson_4/homework_1/ rm * -r scp main.cpp myserver:~/homework/lesson_4/homework_1/ mkdir dir scp -r myserver:/etc/lsb-release ./dir (2) 进入homework_2文件夹,下列描述中的“本地”均表示当前文件夹,要求: [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_2/ [2] 将本地的dir文件夹上传到myserver中的~/homework/lesson_4/homework_2/目录中。 cd ../homework_2 ssh user@hostname cd ~/homework/lesson_4/homework_2/ rm * -r cat -r dir myserver:~/homework/lesson_4/homework_2/ (3) 进入homework_3文件夹,下列描述中的“本地”均表示当前文件夹,要求: [1] 在本地创建文件夹dir。 [2] 将myserver中的/var/lib/locales/supported.d文件夹下载到本地dir文件夹中。 cd ../homework_3 mkdir dir cat myserver:/var/lib/locales/supported.d dir (4) 进入homework_4文件夹,编写脚本remote_mkdir.sh和remote_rmdir.sh,要求: [1] 在myserver服务器上创建并清空文件夹:~/homework/lesson_4/homework_4/ [2] 本地目录下仅包含remote_mkdir.sh和remote_rmdir.sh [3] remote_mkdir.sh和remote_rmdir.sh具有可执行权限 ssh user@hostname mkdir ~/homework/lesson_4/homework_4/ cd ~/homework/lesson_4/homework_4/ rm * -r chmod +x remote_mkdir.sh chmod +x remote_rmdir.sh ll [4] remote_mkdir.sh接收一个传入参数。格式为 ./remote_mkdir.sh directory_name 该操作可以在myserver服务器上的~/homework/lesson_4/homework_4/目录下,创建一个名为directory_name的文件夹 vim remote_mkdir.sh echo "第一个参数:"$1 mkdir '~/homework/lesson_4/homework_4/$1' [5] remote_rmdir.sh接收一个传入传输。格式为 ./remote_rmdir.sh directory_name 该操作可以将myserver服务器上的~/homework/lesson_4/homework_4/目录下的名为directory_name的文件夹删掉。 vim remote_rmdir.sh echo "第一个参数:"$1 rm '~/homework/lesson_4/homework_4/$1' -r cat remote_mkdir.sh remote_rmdir.sh myserver:~/homework/lesson_4/homework_4/ [6] 注意:传入的文件参数可能包含空格。两个脚本均不需要判断传入参数的合法性。