Добро пожаловать, все желающие! Используйте своё свободное время для расширения этого проекта и добавления новых функций.
Стандартное развёртывание
1. Скачайте go1.8.1.linux-amd64.tar.gz.
2. Распакуйте архив с помощью команды tar zxvf go1.8.1.linux-amd64.tar.gz в каталог /usr/local.
3. Добавьте строку export PATH="/usr/local/go/bin:$PATH" в файл /etc/profile.
4. Обновите файл профиля командой source /etc/profile.
5. Перейдите в каталог /opt и выполните команду git clone --recurse-submodules https://github.com/shibingli/webconsole.git. Затем перейдите в папку webconsole и выполните git submodule update --init --recursive.
6. Перейдите в директорию /opt/webconsole/src/apibox.club/apibox и выполните команду GOPATH=/opt/webconsole go install.
7. Настройте автозапуск:
- Скопируйте файл webconsole из папки /opt/webconsole/bin в /etc/init.d/.
- Измените права доступа к файлу с помощью chmod 755 /etc/init.d/webconsole.
- Запустите chkconfig --add webconsole, чтобы добавить сервис в автозагрузку.
- Включите сервис командой chkconfig webconsole on и запустите его командой service webconsole start.
Развёртывание в контейнере Docker
1. Установите Docker.
2. Перейдите в каталог /opt и выполните команды git clone --recurse-submodules https://github.com/shibingli/webconsole.git и cd webconsole && git submodule update --init --recursive.
3. Перейдите в папку /opt/webconsole/src/apibox.club/apibox и выполните команду GOPATH=/opt/webconsole go install.
4. Перейдите в каталог /opt/webconsole и выполните docker build -t webconsole:latest.
5. Запустите контейнер командой docker run -d -p 8080:8080 --restart=always --name webconsole webconsole:latest.
Журнал изменений
28 декабря 2018 года
* Обновления:
* Обновлена основная библиотека JavaScript.
* Добавлена поддержка доступа через контейнеры Docker.
* Выполнены стандартные исправления ошибок.
31 июля 2017 года
* Обновления:
* Обновлено xTerm.js.
20 июля 2017 года
* Исправления:
* Исправлены ошибки отображения символов UTF-8 и обработки больших файлов.
* Эти исправления были выполнены @AEGQ и сопровождались предоставлением кода.
19 апреля 2017 года
* Обновления:
* Удалён файл build.sh.
* Предоставлены инструкции по развёртыванию.
15 апреля 2017 года
* Исправления:
* Устранены некоторые проблемы с отображением страниц.
* Обновлён xTerm.js и добавлены примеры использования внешних ссылок.
11 апреля 2017 года
* Обновления:
* Поддержка JSONP добавлена для удовлетворения потребностей запросов JQuery через междоменные запросы.
* Конфигурационный файл также поддерживает JSONP.
* Запрос на поддержку JSONP был сделан @朱小四 (weichat:juechengke).
27 марта 2017 года
* Исправления:
* Проблема с копированием строк устранена.
* xTerm обновлён до последней версии.
14 марта 2017 года
* Исправления:
* Проблемы с протоколом WSS исправлены.
* Программа Golang обновлена до версии 1.8, а также исправлена ошибка в функции url.Parse.
* Терминал term.js заменён на xterm.js.
* Улучшена поддержка китайских, японских и корейских символов, а также IME.
* Обеспечена лучшая совместимость с популярными программами под Linux, такими как VIM и Tmux.
25 мая 2016 года
* Исправления:
* Ошибка, связанная с отсутствием каталога log и препятствующая запуску программы, устранена.
* Ошибки, мешающие сборке проекта с использованием файла Dockerfile, исправлены.
21 мая 2016 года
* Исправление:
* Проблема с выходом из SSH-сеанса после завершения работы программы устранена.
17 мая 2016 года
* Новые возможности:
* Добавлена поддержка белого списка для междоменного доступа (conf/conf.json cors_white_list:"127.0.0.1,www.xxx.com").
* Предложение о добавлении этой функции было сделано @玩蝴蝶的法师.
5 марта 2016 года
* Новое:
* Файл Dockerfile добавлен.
4 марта 2016 года выпущена версия v1.1
* Новое:
* Команды запуска, остановки и проверки состояния программы добавлены.
3 марта 2016 года
* Исправления:
* Независимый режим входа в систему теперь работает корректно.
* Новое:
* Режимы запуска программы в фоновом режиме и без него добавлены (conf/conf.json daemon:true/false).
* Файлы PID, содержащие информацию о состоянии программы во время её выполнения, добавлены (log/apibox.pid).
Примерная схема потока данных:
Браузер → WebSocket → SSH → ОС Linux.
Код доступен по следующим адресам:
Демонстрационный адрес: http://webconsole.realclouds.org
Структура пакета программы:
├── bin
│ └── apibox
├── conf
│ ├── ssl_cert.crt (по умолчанию не существует)
│ ├── ssl_cert.key (по умолчанию не существует)
│ ├── conf.json
│ └── mime.types
├── log
├── pkg
├── static
│ ├── images
│ └── scripts
└── template
Требования к среде выполнения:
1. Ядро Linux версии 3.x/x86_64 или более поздней версии.
2. Рекомендуется использовать операционные системы CentOS 7.0+ или Ubuntu 14.04+.
3. Для поддержки SSL/TLS при необходимости создайте соответствующие файлы сертификатов SSL и поместите их в папку «conf», настроив файл «conf.json».
4. Клиенты должны использовать IE9, Chrome 40, Firefox 38 или Safari 9 или более поздние версии браузеров.
5. Серверу необходимо разрешить доступ через внешний порт для брандмауэра. Конкретные порты, которые необходимо открыть, см. в файле «conf» и разделе портов файла «conf.json».
6. Программа работает только на операционных системах Unix/Linux и поддерживает SSH.
7. Go1.6+ изначально поддерживает HTTP2.
Процесс развёртывания:
1. Разархивируйте программу или загрузите её в любой каталог и запустите «build.sh» для создания исполняемого файла.
2. Запустите файл «apibox» в папке «bin», например: "./apibox start/stop".
3. Файл конфигурации находится в папке «conf», основной файл конфигурации — «conf.json», при развёртывании добавьте белый список для поддержки доступа других машин.
4. Чтобы запустить программу в фоновом режиме, настройте файл «conf» в папке «conf.json» так, чтобы параметр «daemon» был установлен в значение «true».
5. Журналы программы хранятся в папке «log» с именами, соответствующими дате.
6. Также можно настроить программу для работы в режиме fcgi Nginx, используя Nginx в качестве точки входа. Способ 1: отправьте параметр «vm_addr» на адрес «http(s)://ip:port/console/chksshdaddr», после успешного выполнения получите зашифрованную информацию «en_addr». Примечание: формат vm_addr — «ip:port», если порт не указан, используется порт по умолчанию — 22.
Результат будет в формате JSON (ниже приведены тестовые данные):
Успех:
{
«ok»: true,
«msg»: "",
«data»: { «en_addr»: «0b-nDgcazQKTmUw4oBLfxott», «sshd_addr»: «192.168.220.173:22» }
}
Неудача:
{ «ok»: false, «msg»: «Unable to resolve host address.», «data»: null }
Способ 2: после успешного получения зашифрованной информации «en_addr», можно получить доступ к адресу «http(s)://ip:port/console/login/'en_addr'» с помощью методов GET или POST. Примечание: «en_addr» — это данные, полученные в результате операции из способа 1.
## JQuery Demo:
### Первый способ (требуется повторный вход, но для доступа к одному домену можно использовать междоменный доступ):
```javascript
var protocol = (location.protocol === "https:") ? "https://" : "http://";
var addr = protocol + location.hostname + ((location.port) ? (":" + location.port) : "")
$.post(addr+"/console/chksshdaddr?rnd=" + Math.random(), {
"vm_addr": "192.168.220.177:22"
}, function(data) {
var json = data;
if (typeof(data) != "object") {
json = $.parseJSON(data);
}
if (json.ok) {
location.href = addr + json.data.sshd_addr;
}
});
<button class="btn btn-primary" onclick="testDemo();">Test</button>
<script type="text/javascript">
//Примечание: если удалённый хост доступен по IP-адресу, этот шаг можно пропустить и вызвать метод login напрямую. Пожалуйста, измените адрес и порт входа в соответствии с реальной ситуацией.
var testDemo = function() {
$.ajax({
url: "http://a.com:8081/console/chksshdaddr?rnd=" + Math.random(),
method: "POST",
data: {
"vm_addr": "172.16.18.223:22",
},
dataType: "jsonp",
cache: false,
}).done(function(data) {
var json = data;
if (typeof(data) != "object") {
json = $.parseJSON(data);
}
if (json.ok) {
console.log("en_addr:", json.data.sshd_addr);
login(json.data.sshd_addr, "shibingli", "cloud123456");
} else {
alert("Ошибка входа, пожалуйста, проверьте вашу информацию о хосте.");
}
}).fail(function() {
alert("Неизвестная ошибка, пожалуйста, свяжитесь с администратором.");
});
};
//Примечание: если удалённое устройство доступно по доменному имени или IP-адресу хоста, вы можете выполнить предыдущий шаг, а затем вызвать этот метод. Пожалуйста, измените адрес входа и порт в соответствии с вашей реальной ситуацией.
var login = function(enVMAddr, username, password) {
$.ajax({
url: "http://a.com:8081/console/login?rnd=" + Math.random(),
method: "POST",
data: {
"vm_addr": enVMAddr,
"user_name": username,
"user_pwd": password
},
dataType: "jsonp",
cache: false,
}).done(function(data) {
var json = data;
if (typeof(data) != "object") {
json = $.parseJSON(data);
}
if (json.ok) {
location.href = "http://a.com:8081" + json.data;
} else {
alert("Ошибка входа, пожалуйста, подтвердите свою информацию для входа.");
}
}).fail(function() {
alert("Неизвестная ошибка, пожалуйста, обратитесь к администратору.");
});
};
</script>
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.