服务器文件互传

1.先确保自己的服务器~目录下有.ssh文件夹。
通过

cd ~/.ssh

命令查看有没有 如果没有执行

ssh localhost 

命令,
然后输入自己的密码就会生成.ssh文件。如果还是没有.ssh文件夹可以 执行

ssh-keygen -t rsa

试试看。
2.进入hosts文件添加需要发送的服务器ip 和域名映射

vim /etc/hosts
#在文件末尾追加其他几台服务器以及映射别名
xxx.xxx.xxx.xxx    name1
xxx.xxx.xxx.xxx name2


3.生成密钥和公钥:执行

ssh-keygen -t rsa

命令,一直按回车
4.进入到.ssh文件夹执行 

 ssh-copy-id -i id_rsa.pub root@name01

命令,
目的是将本机公钥给这个服务器然后就可以进行免密登录,
随后需要你输入name01这个服务器的密码就登录成功了。之后远程登录可以使用 ssh nam01(远程免密登录主要是为了传送文件不需要输入密码,Crtl+D退出远程登录)

给自己免密登录:

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

5.我们创建一个用于传输的脚本文件放在这个目录下 /shell/send.sh 文件名和目录随便自己起

//创建shell目录

mkdir /shell

  //进入到这个目录

cd /shell 

 //创建这个send.sh文件并进入编辑

vim send.sh 

填入如下代码:

 #!/bin/bash
 
 if [ $# -lt 2 ]
 then
     echo "please input 2 agrs : source and dest path"
     exit 0
 fi
 #name01、name02就是我们在hosts文件中设置的目标服务器
 SERS="name01 name02"
 
 echo "start to scp distribute : $1 ..."
 for i in $SERS
 do
     if [ $i != $HOSTNAME ]
     then
         echo -n "---- $i ---- "
         if [ -f $1 ]
         then
             CMD=`scp -P 22 $1 root@$i:$2`
         elif [ -d $1 ]
         then
             CMD=`scp  -P 22 -r $1 root@$i:/$2`
         fi
         echo ok
     fi
 done

6.  开始传送文件:命令格式如

bash 脚本存放位置 需要传送到文件或者文件夹   传递到目标主机中的位置 
bash /shell/send.sh /opt/software/  /opt
你可以使用Qt中的QTcpServer和QTcpSocket来实现服务器和客户端之间的通信。要实现多线程文件传输,你可以使用QThread来创建多个线程。以下是一个简单的示例代码: 服务器端: ```cpp // 创建服务器对象 QTcpServer server; // 监听端口 server.listen(QHostAddress::Any, 1234); // 处理新连接 connect(&server, &QTcpServer::newConnection, [&](){ QTcpSocket *socket = server.nextPendingConnection(); // 在新线程中处理连接 QThread *thread = new QThread(this); FileServer *fileServer = new FileServer(socket); fileServer->moveToThread(thread); connect(thread, &QThread::finished, fileServer, &QObject::deleteLater); connect(thread, &QThread::started, fileServer, &FileServer::start); thread->start(); }); ``` 客户端: ```cpp // 连接服务器 QTcpSocket socket; socket.connectToHost(QHostAddress("127.0.0.1"), 1234); // 发送文件 QFile file("test.txt"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); socket.write(data); file.close(); ``` FileServer类: ```cpp class FileServer : public QObject { Q_OBJECT public: explicit FileServer(QTcpSocket *socket, QObject *parent = nullptr); public slots: void start(); private: QTcpSocket *m_socket; }; FileServer::FileServer(QTcpSocket *socket, QObject *parent) : QObject(parent), m_socket(socket) { } void FileServer::start() { // 接收文件 QByteArray data = m_socket->readAll(); QFile file("test.txt"); file.open(QIODevice::WriteOnly); file.write(data); file.close(); // 关闭连接 m_socket->close(); } ``` 需要注意的是,这只是一个简单的示例代码,实际应用中还需要处理错误和异常情况,并且对于大文件传输可能需要分段传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值