Настраиваю сервер SSH на удалённом компьютере, но в какой-то момент отошёл попить кофе. Вернулся и продолжил работу в PowerShell, но почему-то изменения, которые я делал, не применялись. Долго копался и разбирался, пока не заметил, что я выполняю все действия в PowerShell не для удалённого компьютера, а для своего! Путаница возникла из-за того, что при входе в удалённый сеанс SSH через PowerShell никаких визуальных отличий нет! Я решил это хоть как-то исправить.
Для изменения внешнего вида командной строки PowerShell нам нужно править файл профиля консоли PowerShell. Таких профилей несколько:
$PROFILE | Get-Member -MemberType noteproperty | select name Name ---- AllUsersAllHosts AllUsersCurrentHost CurrentUserAllHosts CurrentUserCurrentHost
Мы можем посмотреть, что представляет из себя конкретная переменная, например так:
C:\Windows\System32> $PROFILE.AllUsersAllHosts C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
Как видно из примера выше, в консоль был выведен путь, который представлен в переменной $PROFILE.AllUsersAllHosts.
Ну лучше отобразить всё сразу:
$profile | Select-Object -Property *
Получим:
AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\Admin\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\Admin\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length : 75
Поскольку у меня включена проверка подписи скриптов PowerShell, то мне удобнее вносить изменения в файл профиля именно для админа (CurrentUserAllHosts).
Можно создать файл профиля через командлет, но мне проще вручную. Полный путь к файлу профиля для нашего админа будет такой:
«C:\Users\Admin\Documents\WindowsPowerShell\profile.ps1»
В него я добавил такие строчки:
function Prompt
{
#"[\\" + $env:COMPUTERNAME + "] " + (Get-Location) + "> "
Write-Host "[\\" -f DarkGray -nonewline;
Write-Host $env:COMPUTERNAME -f DarkGray -nonewline;
Write-Host "] " -f DarkGray -nonewline;
"" + (Get-Location) + "> "
}
Set-ExecutionPolicy Remotesigned
Кроме этого чтобы профиль мог запуститься, нужно, чтобы был разрешён (не был запрещён) запуск этого скрипта в SRP.
По умолчанию приглашение в консоли PowerShell выглядит так:
Если я подключусь удалённо через SSH к другому компьютеру, то она мало изменится:
После изменения файла профиля на удалённом компьютере, консоль стала информативнее:
Added 23.06.21
Изменил скрипт так, чтобы дополнительно выводилось имя текущего пользователя:
function Prompt
{
Write-Host "[\\" -f DarkGray -nonewline;
Write-Host $Env:USERNAME@$env:COMPUTERNAME -f DarkGray -nonewline;
Write-Host "] " -f DarkGray -nonewline;
"" + (Get-Location) + "> "
}
Решение возможных проблем
Если для удалённого компьютера (по OpenSSH) правила отображения не сработали, то есть вероятность, что дефолтовый шелл у вас не PowerShell, а обычная консоль. Попробуйте проверить, просто набрав в той консоли powershell. Если после этого откроется консоль PowerShell и будет работать корректное отображение приглашения со всей расцветкой, то на сервере нужно будет поменять шелл для OpenSSH:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force
- Windows 10: Уменьшить размер виртуальной машины WSL - 06.10.2024
- Windows 10: Событие EventID 63 в Журнале Приложений - 28.09.2024
- Android: Захват траффика - 07.09.2024