6个版本
0.4.0 | 2024年3月25日 |
---|---|
0.3.0 | 2024年2月27日 |
0.2.7 | 2024年2月16日 |
0.2.5 | 2022年5月10日 |
0.2.3 | 2022年3月28日 |
#69 in 认证
在 2 crates 中使用
56KB
1.5K SLoC
ssh-agent-lib
根据SSH代理协议Internet Draft编写的用于编写自定义SSH代理的类型集合。
这使得可以使用默认OpenSSH代理不支持远程密钥。
示例
以下示例在一个套接字上开始监听并处理请求。在Unix上使用ssh-agent.sock
Unix域套接字,而在Windows上使用命名管道\\.\pipe\agent
。
#[cfg(not(windows))]
use tokio::net::UnixListener;
#[cfg(windows)]
use ssh_agent_lib::agent::NamedPipeListener;
use ssh_agent_lib::agent::{Session, Agent};
use ssh_agent_lib::proto::message::Message;
#[derive(Default)]
struct MyAgent;
#[ssh_agent_lib::async_trait]
impl Session for MyAgent {
async fn handle(&mut self, message: Message) -> Result<Message, Box<dyn std::error::Error>> {
match message {
Message::SignRequest(request) => {
// get the signature by signing `request.data`
let signature = vec![];
Ok(Message::SignResponse(signature))
},
_ => Ok(Message::Failure),
}
}
}
#[tokio::main]
#[cfg(not(windows))]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let socket = "ssh-agent.sock";
let _ = std::fs::remove_file(socket); // remove the socket if exists
MyAgent.listen(UnixListener::bind(socket)?).await?;
Ok(())
}
#[tokio::main]
#[cfg(windows)]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
MyAgent.listen(NamedPipeListener::new(r"\\.\pipe\agent".into())?).await?;
Ok(())
}
现在,使用SSH_AUTH_SOCK
环境变量将您的OpenSSH客户端指向此套接字,它将透明地使用代理
SSH_AUTH_SOCK=ssh-agent.sock ssh [email protected]
在Windows上必须使用管道的路径
SSH_AUTH_SOCK=\\.\pipe\agent ssh [email protected]
更多详细的示例请参阅examples
目录或使用ssh-agent-lib
的crates。
注意
此库是从sekey/ssh-agent.rs分叉的,因为上游似乎没有得到维护(至少截至2022年)。
许可证
本项目采用MIT许可证。
贡献
除非您明确说明,否则您提交的任何有意包含在此crate中的贡献都将按上述方式许可,无需任何附加条款或条件。
依赖关系
~0.5–9.5MB
~85K SLoC