工作中遇到场景,由于先前基于windows平台搭建了一个小型的网站,供于项目组其他同事进行应用和相关资料的管理和查找,近期业务拓展,设计到了ubuntu平台应用的构建相关工作,为了保证项目组使用体验的一直连续性,也便于统一管理,需要将ubuntu平台构建的应用等信息归档到windows平台。但是对于shell双左斜线“\" 在ubuntu平台被用来作为转移字符使用,因此,ubuntu平台并不能直接通过cp的方式将文件拷贝到windows共享路径下(我这边没找到,如果有其它的方法还请大神指点 ),在此整理归档仅作个人纪录,便于后续查找。
针对此场景可以通过搭建FTP服务器来进行或者通过Jenkins Archive the artifacts 方式实现传输,但应用场景不具有通用性,在此以ubuntu系统自带命令scp方式来实现。scp底层是基于ssh协议,端口号是22.因此要使用必须先创建一个ssh-key,具体流程如下:
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : localdomain
Link-local IPv6 Address . . . . . : fe80::c00f:8e2e:7e7e:46ed%10
IPv4 Address. . . . . . . . . . . : 192.168.230.128
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.230.2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.230.129 netmask 255.255.255.0 broadcast 192.168.230.255
inet6 fe80::cd5e:1d99:b4d5:e282 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4d:fd:30 txqueuelen 1000 (Ethernet)
RX packets 97969 bytes 127776680 (127.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14562 bytes 2081785 (2.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
sudo apt install openssh-server
安装完成之后输入以下命令查看是否已经启动,其中有sshd项表明已经启动,到此ubuntu配置完成!
ps -ef |grep ssh
admin 1426 1353 0 2020 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu
root 5701 1 0 2020 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
admin 8084 1267 0 2020 ? 00:00:00 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
admin 8765 4118 0 00:00 pts/0 00:00:00 grep --color=auto ssh
生成公钥方式比较简单,ubuntu平台与windows平台都已经装了ssh,只需要在命令行终端输入以下命令即可:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/windows/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/windows/.ssh/id_rsa
Your public key has been saved in /c/Users/windows/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Vynhe9PMM8Es4lcjmFzVFAODGtIEl2mVKzLp3HXEwWU xxxxxxxxxxxxxO
The key's randomart image is:
+---[RSA 3072]----+
| .+o=.*==Eo|
| ..O B Bo o|
| + X B * |
| + + B O o |
| o S * = * |
| o o o . o |
| |
| |
| |
+----[SHA256]-----+
此时会在用户目录下.ssh文件夹下生成两个文件,其中id_rsa文件为私钥文件,id_rsa.pub为公钥文件,是需要传输到其他与此机器通信的设备上面的,在此也就是将windows设备上的id_rsa.pub文件传输到ubuntu设备上,并将ubuntu设备上的id_rsa.pub文件传输到windows上面。
**其中在windows平台需要将id_rsa.pub文件中的公钥信息增加到C:/Users/xxx/.ssh/authorized中,而在ubuntu设备上需要将id_rsa.pub文件中的公钥信息增加到/User/xxx/.ssh/authorized_key中。**这里两个文件的名字是不同的,不是很清楚为什么还有这个区别
通过以上步骤就已经将基本的环境配置搭建完成了,下面我们可以通过在windows平台上创建一个名为windows.txt的文件,在ubuntu上创建一个名为ubuntu.txt的文件,测试以下使用scpn能否正常输出文件。
使用Ctrl+Alt+T打开终端,,输入如下指令:
admin@admin:~$ echo "hello this is ubuntu files" >ubuntu.txt
admin@admin:~$ scp ubuntu.txt [email protected]:/c:/
[email protected]'s password:
ubuntu.txt 100% 27 1.5KB/s 00:00
在搜索框中输入cmd打开命令行窗口,输入如下命令:
C:\>echo "hello this is windows files" >windows.txt
C:\>scp Windows.txt [email protected]:/home/admin/
[email protected]'s password:
Windows.txt 100% 32 0.0KB/s 00:00
C:\>