server & pserver—充当 stdin/stdout 客户端的服务器

本文介绍了cvsserver和pserver命令的基本用法及区别。这两种命令主要用于提供远程客户端访问仓库的功能,并要求客户端通过标准输入和输出进行交互。server命令假设客户端已通过SSH认证,而pserver则自行完成客户端的认证过程。
  • pserver [-c path]

    server [-c path]

  • 需要: 仓库,与 stdin/stdout 交互的客户端
  • 修改: 仓库,或者非直接的客户端工作目录。

cvs serverpserver 命令提供远程客户端访问的仓库,并要求客户端与 stdin & stdout 交互。通常这些命令通过 inetdssh 调用(参阅 Remote repositories)。

server 期望客户端已经认证,一般是通过 ssh,而 pserver 是自己认证客户端。

serverpserver 命令只使用一个选项:

-c path
path 加载配置文件,而不使用默认的 $CVSROOT/CVSROOT/config (参阅 config)。 path 必须是 /etc/cvs.conf 或前缀为 /etc/cvs/。此选项从 cvs 1.12.13 版开始使用。
import os import paramiko from getpass import getpass # 定义服务器列表 servers = ["server1", "server2", "server3"] # 获取用户密码 password = getpass("Enter the password for SSH connections: ") # 初始化SSH客户端 def initialize_ssh_client(server, password): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(server, username="user", password=password) return client # 检查并清理旧密钥 def clean_old_keys(client): stdin, stdout, stderr = client.exec_command('if [ -d ~/.ssh ]; then rm -rf ~/.ssh/*; else mkdir -p ~/.ssh; fi && chmod 700 ~/.ssh') exit_status = stdout.channel.recv_exit_status() if exit_status != 0: raise Exception(f"Failed to clean old keys on {server}") # 生成新密钥对 def generate_key_pair(client): stdin, stdout, stderr = client.exec_command('ssh-keygen -q -t rsa -N "" -f ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa') exit_status = stdout.channel.recv_exit_status() if exit_status != 0: raise Exception(f"Failed to generate key pair on {server}") # 收集公钥 def collect_public_key(client, server): stdin, stdout, stderr = client.exec_command('cat ~/.ssh/id_rsa.pub') exit_status = stdout.channel.recv_exit_status() if exit_status != 0: raise Exception(f"Failed to collect public key from {server}") return stdout.read().decode('utf-8').strip() # 分发授权文件 def distribute_authorized_keys(client, authorized_keys_content): stdin, stdout, stderr = client.exec_command('echo "{}" >> ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys'.format(authorized_keys_content)) exit_status = stdout.channel.recv_exit_status() if exit_status != 0: raise Exception(f"Failed to distribute authorized keys to {server}") # 主逻辑 all_public_keys = [] for server in servers: client = initialize_ssh_client(server, password) clean_old_keys(client) generate_key_pair(client) public_key = collect_public_key(client, server) all_public_keys.append(public_key) client.close() for server in servers: client = initialize_ssh_client(server, password) authorized_keys_content = "\n".join(all_public_keys) distribute_authorized_keys(client, authorized_keys_content) client.close() print("SSH trust configuration completed successfully.") 不使用paramiko
06-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值