PowerShell 모듈로 SSH 구성 항목 관리

7989 단어 powershellssh
나는 몇 달 동안 이것을하고 싶었습니다. 오늘 오후, 휴가 버킷리스트에서 조금 더 복잡한 작업을 미루기 위해 마침내 시간을내어 이것을 만들었습니다 PowerShell module .

매우 간단하지만 깔끔한 구성 파일을 관리할 수 있도록 지원합니다.

!!!DISCLAIMER!!! no warranty - please test the behavior of this script for thoroughly your environment and make regular backups



모듈 사용 방법



모듈을 가져온 후

Import-Module .\ManageSshConfig.psm1


그것은 허용

a - 구성된 호스트 목록을 HashTable로 읽기




$hostList = Get-ConfigHostList


b - 이 호스트 목록에 새 항목 추가




$hostList = Add-ConfigHostInList -HostList $hostList -HostName "dummy" -HostValues @{
    identityfile = "~/.ssh/myprivatekey"
    hostname     = "dummy.somecloud.com"
    user         = "johndoe"
}


c - 이 호스트 목록의 기존 항목을 업데이트합니다.




$hostList = Update-ConfigHostInList -HostList $hostList -HostName "dummy" -HostValues @{
    identityfile = "~/.ssh/myprivatekey"
    hostname     = "dummy.somecloud.com"
    user         = "johndoe"
}


d - 이 호스트 목록에서 기존 항목을 제거합니다.




$hostList = Remove-ConfigHostFromList -HostList $hostList -HostName "dummy"


e - 그런 다음 이 목록을 다시 디스크에 씁니다.




Set-ConfigHostList $hostList


특징



줄바꿈



스크립트는 config 파일에 사용된 줄 바꿈을 식별할 수 있어야 합니다. 이것은 Windows에서 CR/LF가 될 수 있으며 Linux, macOS 등에서는 분명히 LF입니다.

이것이 생소하게 들리면 Scott Hanselman's nice explanation on this topic을 확인하십시오.

on my Windows machine I forced Visual Studio Code to always safe it with LF line endings - just to be safe when copying this file back and forth between various OS platforms



키워드


IdentityFile 또는 HostName와 같은 키워드는 다음과 같은 경우 조화됩니다.
  • config 파일에서 HashTable로 읽기
  • 항목 추가 또는 업데이트

  • 일반적으로 문서like에서 볼 수 있는 표기법에 따름 .

    JSON



    호스트 목록이 로드되면 JSON으로 변환할 수도 있습니다.

    $hostList = Get-ConfigHostList
    $hostList | ConvertTo-Json
    



    {
      "dummy": {
        "User": "johndoe",
        "HostName": "dummy.somecloud.com",
        "IdentityFile": "~/.ssh/myprivatekey"
      }
    }
    


    이를 통해 SSH 구성을 JSON 파일로 내보내고 해당 형식으로 관리한 다음 다시 가져올 수도 있습니다.

    $hostList = Get-ConfigHostList
    $hostList | ConvertTo-Json -AsHashtable | Set-Content "ssh-config.json"
    ... do your magic here ...
    $hostList = Get-Content "ssh-config.json" | ConvertFrom-Json -AsHashtable
    Set-ConfigHostList $hostList
    

    좋은 웹페이지 즐겨찾기