SSH.NET은 SSH 연결과 명령어 송수신을 닷넷에서 프로그래밍 방식으로 처리할 수 있도록 도와주는 라이브러리로, 이 라이브러리를 이용하면 리눅스 명령어 사용을 코드 레벨로 가져와서 프로그래밍할 수 있습니다. 이 라이브러리를 이용할 때 좋은 점은, 몇몇 CLI 도구들이 출력 자체를 YAML, JSON, XML로 내보내주기 때문에, 마치 SSH 시스템 자체를 API 서버 사용하듯 활용할 수 있다는 점이 매력적입니다.
var sshFolderPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
".ssh");
var keyFiles = new List<IPrivateKeySource>();
var defaultRsaKeyPath = Path.Combine(sshFolderPath, "id_rsa");
if (File.Exists(defaultRsaKeyPath))
{
Console.Write($"Provide {defaultRsaKeyPath} password: ");
var defaultRsaKeyPassword = Console.ReadLine();
keyFiles.Add(new PrivateKeyFile(defaultRsaKeyPath, defaultRsaKeyPassword));
}
using var client = new SshClient("discourse-dotnetdev", "root", keyFiles.ToArray());
await client.ConnectAsync(default);
var listCommand = client.CreateCommand("docker inspect app");
await listCommand.ExecuteAsync();
JsonDocument.Parse(listCommand.Result).Dump();
위의 코드는 app 컨테이너의 상세 정보를 docker inspect 명령으로 조회하는 것으로, docker inspect의 출력 자체가 JSON으로 들어오기 때문에 이것을 곧바로 System.Text.Json의 JsonDocument로 받을 수 있다는 것입니다.
라이브러리의 자세한 사용법은 아래 Github 페이지를 참조하시면 되겠습니다. ![]()
