mirror of
https://github.com/hassio-addons/repository-edge.git
synced 2025-05-05 11:41:31 +00:00
325 lines
12 KiB
Markdown
325 lines
12 KiB
Markdown
# Home Assistant Community Add-on: Advanced SSH & Web Terminal
|
|
|
|
This add-on allows you to log in to your Home Assistant instance using
|
|
SSH or a Web Terminal, giving you to access your folders and
|
|
also includes a command-line tool to do things like restart, update,
|
|
and check your instance.
|
|
|
|
This is an enhanced version of the provided
|
|
[SSH add-on by Home Assistant][hass-ssh] and focuses on security,
|
|
usability, flexibility and also provides access using a web interface.
|
|
|
|
## WARNING
|
|
|
|
The advanced SSH & Web Terminal add-on is very powerful and gives you access
|
|
to almost all tools and hardware of your system.
|
|
|
|
While this add-on is created and maintained with care and with security in mind,
|
|
in the wrong or inexperienced hands, it could damage your system.
|
|
|
|
## Features
|
|
|
|
This add-on, of course, provides an SSH server, based on [OpenSSH][openssh] and
|
|
a web-based Terminal (which can be included in your Home Assistant frontend) as
|
|
well. Additionally, it comes out of the box with the following:
|
|
|
|
- Access your command line right from the Home Assistant frontend!
|
|
- A secure default configuration of SSH:
|
|
- Only allows login by the configured user, even if more users are created.
|
|
- Only uses known secure ciphers and algorithms.
|
|
- Limits login attempts to hold off brute-force attacks better.
|
|
- Many more security tweaks, _this addon passes all [ssh-audit] checks
|
|
without warnings!_
|
|
- Comes with an SSH compatibility mode option to allow older clients to connect.
|
|
- Support for Mosh allowing roaming and supports intermittent connectivity.
|
|
- SFTP support is disabled by default but is user configurable.
|
|
- Compatible if Home Assistant was installed via the generic Linux installer.
|
|
- Username is configurable, so `root` is no longer mandatory.
|
|
- Persists custom SSH client settings & keys between add-on restarts
|
|
- Hardware access to your audio, uart/serial devices and GPIO pins.
|
|
- Runs with more privileges, allowing you to debug and test more situations.
|
|
- Has access to the dbus of the host system.
|
|
- Has the option to access the Docker instance running on the host system.
|
|
- Runs on host level network, allowing you to open ports or run little daemons.
|
|
- Have custom Alpine packages installed on start. This allows you to install
|
|
your favorite tools, which will be available every single time you log in.
|
|
- Execute custom commands on add-on start so that you can customize the
|
|
shell to your likings.
|
|
- [ZSH][zsh] as its default shell. Easier to use for the beginner, more advanced
|
|
for the more experienced user. It even comes preloaded with
|
|
["Oh My ZSH"][ohmyzsh], with some plugins enabled as well.
|
|
- Bash: If ZSH is not your cup of tea, Bash can be enabled again, which
|
|
includes Bash completion for both the Core CLI and the Home Assistant CLI.
|
|
- Contains a sensible set of tools right out of the box: curl, Wget, RSync, GIT,
|
|
Nmap, Mosquitto client, MariaDB/MySQL client, Awake (“wake on LAN”), Nano,
|
|
Vim, tmux, and a bunch commonly used networking tools.
|
|
- Support executing commands inside using a Home Assistant service call, e.g.,
|
|
for use with automations.
|
|
|
|
## Installation
|
|
|
|
The installation of this add-on is pretty straightforward and not different in
|
|
comparison to installing any other Home Assistant add-on.
|
|
|
|
1. Click the Home Assistant My button below to open the add-on on your Home
|
|
Assistant instance.
|
|
|
|
[![Open this add-on in your Home Assistant instance.][addon-badge]][addon]
|
|
|
|
1. Click the "Install" button to install the add-on.
|
|
1. Configure the `username` and `password`/`authorized_keys` options.
|
|
1. Start the "Advanced SSH & Web Terminal" add-on.
|
|
1. Check the logs of the "Advanced SSH & Web Terminal" add-on to see if everything
|
|
went well.
|
|
|
|
## Configuration
|
|
|
|
**Note**: _Remember to restart the add-on when the configuration is changed._
|
|
|
|
SSH add-on configuration:
|
|
|
|
```yaml
|
|
log_level: info
|
|
ssh:
|
|
username: homeassistant
|
|
password: ""
|
|
authorized_keys:
|
|
- ssh-rsa AASDJKJKJFWJFAFLCNALCMLAK234234.....
|
|
sftp: false
|
|
compatibility_mode: false
|
|
allow_agent_forwarding: false
|
|
allow_remote_port_forwarding: false
|
|
allow_tcp_forwarding: false
|
|
zsh: true
|
|
share_sessions: true
|
|
packages:
|
|
- build-base
|
|
init_commands:
|
|
- ls -la
|
|
```
|
|
|
|
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
|
|
|
### Option: `log_level`
|
|
|
|
The `log_level` option controls the level of log output by the addon and can
|
|
be changed to be more or less verbose, which might be useful when you are
|
|
dealing with an unknown issue. Possible values are:
|
|
|
|
- `trace`: Show every detail, like all called internal functions.
|
|
- `debug`: Shows detailed debug information.
|
|
- `info`: Normal (usually) interesting events.
|
|
- `warning`: Exceptional occurrences that are not errors.
|
|
- `error`: Runtime errors that do not require immediate action.
|
|
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
|
|
|
|
Please note that each level automatically includes log messages from a
|
|
more severe level, e.g., `debug` also shows `info` messages. By default,
|
|
the `log_level` is set to `info`, which is the recommended setting unless
|
|
you are troubleshooting.
|
|
|
|
Using `trace` or `debug` log levels puts the SSH and Terminal daemons into
|
|
debug mode. While SSH is running in debug mode, it will be only able to
|
|
accept one single connection at the time.
|
|
|
|
### Option group `ssh`
|
|
|
|
---
|
|
|
|
The following options are for the option group: `ssh`. These settings
|
|
only apply to the SSH daemon.
|
|
|
|
#### Option `ssh`: `username`
|
|
|
|
This option allows you to change to username the use when you log in via SSH.
|
|
It is only utilized for the authentication; you will be the `root` user after
|
|
you have authenticated. Using `root` as the username is possible, but not
|
|
recommended. Usernames will be converted to lower case as per recommended
|
|
practises.
|
|
|
|
**Note**: _Due to limitations, you will need to set this option to `root` in
|
|
order to be able to enable the SFTP capabilities._
|
|
|
|
#### Option `ssh`: `password`
|
|
|
|
Sets the password to log in with. Leaving it empty would disable the possibility
|
|
to authenticate with a password. We would highly recommend not to use this
|
|
option from a security point of view.
|
|
|
|
#### Option `ssh` `authorized_keys`
|
|
|
|
Add one or more public keys to your SSH server to use with authentication.
|
|
This is the recommended over setting a password.
|
|
|
|
Please take a look at the awesome [documentation created by GitHub][github-ssh]
|
|
about using public/private key pairs and how to create them.
|
|
|
|
**Note**: _Please ensure the keys are specified as a list by pasting within the
|
|
`[]` comma delimited._
|
|
|
|
#### Option `ssh`: `sftp`
|
|
|
|
When set to `true` the addon will enable SFTP support on the SSH daemon.
|
|
Please only enable it when you plan on using it.
|
|
|
|
**Note**: _Due to limitations, you will need to set the username to `root` in
|
|
order to be able to enable the SFTP capabilities._
|
|
|
|
#### Option `ssh`: `compatibility_mode`
|
|
|
|
This SSH add-on focuses on security and has therefore only enabled known
|
|
secure encryption methods. However, some older clients do not support these.
|
|
Setting this option to `true` will enable the original default set of methods,
|
|
allowing those clients to connect.
|
|
|
|
**Note**: _Enabling this option, lowers the security of your SSH server!_
|
|
|
|
#### Option `ssh`: `allow_agent_forwarding`
|
|
|
|
Specifies whether ssh-agent forwarding is permitted or not.
|
|
|
|
**Note**: _Enabling this option, lowers the security of your SSH server!
|
|
Nevertheless, this warning is debatable._
|
|
|
|
#### Option `ssh`: `allow_remote_port_forwarding`
|
|
|
|
Specifies whether remote hosts are allowed to connect to ports forwarded
|
|
for the client.
|
|
|
|
**Note**: _Enabling this affects all remote forwardings, so think carefully
|
|
before doing this._
|
|
|
|
#### Option `ssh`: `allow_tcp_forwarding`
|
|
|
|
Specifies whether TCP forwarding is permitted or not.
|
|
|
|
**Note**: _Enabling this option, lowers the security of your SSH server!
|
|
Nevertheless, this warning is debatable._
|
|
|
|
### Shared settings
|
|
|
|
---
|
|
|
|
The following options are shared between both the SSH and the Web Terminal.
|
|
|
|
#### Option: `zsh`
|
|
|
|
The add-on has ZSH pre-installed and configured as the default shell.
|
|
However, ZSH might not be your preferred choice. By setting this option to
|
|
`false`, you will disable ZSH and the add-on will fallback to Bash instead.
|
|
|
|
#### Option: `share_sessions`
|
|
|
|
By default, the terminal session between the web client and SSH is shared.
|
|
This allows you to pick up where you left your terminal from either of those.
|
|
|
|
This option allows you to disable this behavior by setting it to `false`, which
|
|
effectively sets SSH to behave as it used to be.
|
|
|
|
#### Option: `packages`
|
|
|
|
Allows you to specify additional [Alpine packages][alpine-packages] to be
|
|
installed in your shell environment (e.g., Python, Joe, Irssi).
|
|
|
|
**Note**: _Adding many packages will result in a longer start-up
|
|
time for the add-on._
|
|
|
|
#### Option: `init_commands`
|
|
|
|
Customize your shell environment even more with the `init_commands` option.
|
|
Add one or more shell commands to the list, and they will be executed every
|
|
single time this add-on starts.
|
|
|
|
## Known issues and limitations
|
|
|
|
- When SFTP is enabled, the username MUST be set to `root`.
|
|
- If you want to use rsync for file transfer, the username MUST be set to
|
|
`root`.
|
|
|
|
## Changelog & Releases
|
|
|
|
This repository keeps a change log using [GitHub's releases][releases]
|
|
functionality.
|
|
|
|
Releases are based on [Semantic Versioning][semver], and use the format
|
|
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
|
based on the following:
|
|
|
|
- `MAJOR`: Incompatible or major changes.
|
|
- `MINOR`: Backwards-compatible new features and enhancements.
|
|
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
|
|
|
## Visual Studio Code Remote - SSH
|
|
|
|
Setting the following parameters as is shown will allow you to connect to
|
|
your Home Assistant instance using VSCode Remote - SSH:
|
|
|
|
```yaml
|
|
allow_remote_port_forwarding: true
|
|
allow_tcp_forwarding: true
|
|
```
|
|
|
|
## Support
|
|
|
|
Got questions?
|
|
|
|
You have several options to get them answered:
|
|
|
|
- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
|
|
support and feature requests.
|
|
- The [Home Assistant Discord chat server][discord-ha] for general Home
|
|
Assistant discussions and questions.
|
|
- The Home Assistant [Community Forum][forum].
|
|
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
|
|
|
|
You could also [open an issue here][issue] GitHub.
|
|
|
|
## Authors & contributors
|
|
|
|
The original setup of this repository is by [Franck Nijhof][frenck].
|
|
|
|
For a full list of all authors and contributors,
|
|
check [the contributors page][contributors].
|
|
|
|
## License
|
|
|
|
MIT License
|
|
|
|
Copyright (c) 2017-2023 Franck Nijhof
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
|
|
[addon-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
|
|
[addon]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_ssh&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
|
|
[alpine-packages]: https://pkgs.alpinelinux.org/packages
|
|
[contributors]: https://github.com/hassio-addons/addon-ssh/graphs/contributors
|
|
[discord-ha]: https://discord.gg/c5DvZ4e
|
|
[discord]: https://discord.me/hassioaddons
|
|
[forum]: https://community.home-assistant.io/t/community-hass-io-add-on-ssh-web-terminal/33820?u=frenck
|
|
[frenck]: https://github.com/frenck
|
|
[github-ssh]: https://help.github.com/articles/connecting-to-github-with-ssh/
|
|
[hass-ssh]: https://github.com/home-assistant/addons/tree/master/ssh
|
|
[issue]: https://github.com/hassio-addons/addon-ssh/issues
|
|
[ohmyzsh]: http://ohmyz.sh/
|
|
[openssh]: https://www.openssh.com/
|
|
[reddit]: https://reddit.com/r/homeassistant
|
|
[releases]: https://github.com/hassio-addons/addon-ssh/releases
|
|
[semver]: https://semver.org/spec/v2.0.0.html
|
|
[ssh-audit]: https://github.com/jtesta/ssh-audit
|
|
[zsh]: https://en.wikipedia.org/wiki/Z_shell
|