SSH.NET으로 리눅스 셸 작업 자동화하기

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 페이지를 참조하시면 되겠습니다. :smiley:

9개의 좋아요