Управление записями конфигурации SSH с помощью модуля PowerShell

Я хотел сделать это уже несколько месяцев. Сегодня днем, чтобы отложить немного более сложную задачу в моем списке дел на отпуск, я наконец нашел время и создал этот модуль PowerShell.

Он довольно прост, но поддерживает мои катры для управления чистыми конфигурационными файлами.

!!!DISCLAIMER!!! никаких гарантий — пожалуйста, тщательно проверьте поведение этого скрипта в вашей среде и регулярно делайте резервные копии.

Как использовать модуль

После импорта модуля

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. Это может быть CR/LF в Windows и определенно LF в Linux, macOS & аналогично.

Если это кажется вам незнакомым, ознакомьтесь с хорошим объяснением Скотта Хансельмана на эту тему.

На моей машине Windows я заставил Visual Studio Code всегда сохранять окончания строк с LF — просто чтобы быть в безопасности при копировании этого файла туда и обратно между различными платформами ОС.

Ключевые слова

Ключевые слова типа IdentityFile или HostName согласовываются при

  • чтении из файла config в HashTable
  • добавление или обновление записей

в соответствии с нотацией, обычно встречающейся в документации, например.

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
Войти в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий