|
@@ -1,8 +1,9 @@
|
|
|
use anyhow::{Context, Result};
|
|
use anyhow::{Context, Result};
|
|
|
use base64::Engine;
|
|
use base64::Engine;
|
|
|
use base64::engine::general_purpose::STANDARD;
|
|
use base64::engine::general_purpose::STANDARD;
|
|
|
|
|
+use russh::client;
|
|
|
use russh::keys::{PrivateKeyWithHashAlg, load_secret_key as russh_load_secret_key};
|
|
use russh::keys::{PrivateKeyWithHashAlg, load_secret_key as russh_load_secret_key};
|
|
|
-use russh::*;
|
|
|
|
|
|
|
+use russh::{ChannelMsg, Error as SshError};
|
|
|
use sha2::{Digest, Sha256};
|
|
use sha2::{Digest, Sha256};
|
|
|
use std::sync::Arc;
|
|
use std::sync::Arc;
|
|
|
use tokio::time::{Duration, sleep};
|
|
use tokio::time::{Duration, sleep};
|
|
@@ -150,7 +151,7 @@ pub async fn fetch_host_key(config: &Config, node: &Node) -> Result<String> {
|
|
|
captured: Arc<Mutex<Option<Vec<u8>>>>,
|
|
captured: Arc<Mutex<Option<Vec<u8>>>>,
|
|
|
}
|
|
}
|
|
|
impl client::Handler for CaptureHandler {
|
|
impl client::Handler for CaptureHandler {
|
|
|
- type Error = russh::Error;
|
|
|
|
|
|
|
+ type Error = SshError;
|
|
|
async fn check_server_key(
|
|
async fn check_server_key(
|
|
|
&mut self,
|
|
&mut self,
|
|
|
key: &russh::keys::PublicKey,
|
|
key: &russh::keys::PublicKey,
|
|
@@ -196,7 +197,7 @@ pub struct VerifyingHandler {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
impl client::Handler for VerifyingHandler {
|
|
impl client::Handler for VerifyingHandler {
|
|
|
- type Error = russh::Error;
|
|
|
|
|
|
|
+ type Error = SshError;
|
|
|
|
|
|
|
|
async fn check_server_key(
|
|
async fn check_server_key(
|
|
|
&mut self,
|
|
&mut self,
|
|
@@ -208,7 +209,7 @@ impl client::Handler for VerifyingHandler {
|
|
|
let hash = Sha256::digest(&key_bytes);
|
|
let hash = Sha256::digest(&key_bytes);
|
|
|
let fp = format!("SHA256:{}", STANDARD.encode(hash));
|
|
let fp = format!("SHA256:{}", STANDARD.encode(hash));
|
|
|
if &fp != expected_fp {
|
|
if &fp != expected_fp {
|
|
|
- return Err(russh::Error::Kex);
|
|
|
|
|
|
|
+ return Err(SshError::Kex);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
Ok(true)
|
|
Ok(true)
|