SFTP: adding SFTP Server

This commit is contained in:
XargonWan 2023-11-09 10:28:48 +01:00
parent 93b45bdc2d
commit e26f238f26
7 changed files with 60 additions and 90 deletions

View file

@ -1,34 +0,0 @@
#!/bin/bash
port=21
ip=$(hostname -I | awk '{print $1}')
# Check if the port is in use
if nc -z localhost $port; then
zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - FTP Server" \
--text="Port $port is already in use. Please stop any services on that port and try again."
exit 1
fi
# Start FTP server on port $port
nohup vsftpd /var/config/retrodeck/ftp/vsftpd.conf &
# Get the PID of the FTP server process
ftp_pid=$!
# Function to stop the FTP server
stop_ftp_server() {
kill -9 $ftp_pid
exit 0
}
# Create a Zenity window with only the "Stop" button
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - FTP Server" \
--text="FTP server started.\n\nAddress: $ip\nport: $port\nID:\tretrodeck\nPassword:\tretrodeck\npointing to:\n$rdhome\n\nPress Stop to terminate the server." --ok-label="Stop" || stop_ftp_server
# If the user clicks "Stop", call the function to stop the FTP server
stop_ftp_server

View file

@ -714,21 +714,6 @@ prepare_emulator() {
fi fi
# TODO: this is not properly an emulator but let's treat like this for the moment
if [[ "$emulator" =~ ^(ftp|FTP|all)$ ]]; then
# TODO: do a proper script
# This is just a placeholder script to test the emulator's flow
echo "------------------------"
echo "Initializing FTP Server"
echo "------------------------"
mkdir -p "/var/config/ftp"
cp "/app/retrodeck/ftp/*" "/var/config/retrodeck/ftp"
# TODO: this step is to be done properly: Replacing RETRODECKHOMEDIR placeholder
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "/var/config/retrodeck/ftp/vsftpd.conf"
fi
# Update presets for all emulators after any reset or move # Update presets for all emulators after any reset or move
if [[ ! "$emulator" == "retrodeck" ]]; then if [[ ! "$emulator" == "retrodeck" ]]; then
build_retrodeck_current_presets build_retrodeck_current_presets

45
functions/sftp_server.sh Normal file
View file

@ -0,0 +1,45 @@
#!/bin/bash
port=22
ip=$(hostname -I | awk '{print $1}')
# Check if the port is in use
if nc -z localhost $port; then
zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - SFTP Server" \
--text="Port $port is already in use. Please stop any services on that port and try again."
exit 1
fi
# Create a temporary directory for SFTP chroot
mkdir -p /tmp/sftp_home/retrodeck
echo "retrodeck:$(openssl passwd -1 retrodeck)" >> /tmp/sftp_home/retrodeck/etc/passwd
# Set rdhome as the home directory for retrodeck user
echo "Match User retrodeck\n ChrootDirectory $rdhome" >> /etc/ssh/sshd_config
# Restart SSHD to apply the new configuration
service ssh restart
# Start SSHD with SFTP support and specific user and password
nohup /usr/sbin/sshd -p $port -o PasswordAuthentication=yes -o PubkeyAuthentication=no -o AuthorizedKeysFile=/dev/null -o UsePAM=no -o AllowTcpForwarding=no -o PermitRootLogin=no -o ChrootDirectory=/tmp/sftp_home/retrodeck &
# Get the PID of the SSH/SFTP server process
ssh_pid=$!
# Function to stop the SSH/SFTP server
stop_ssh_server() {
kill -9 $ssh_pid
rm -rf /tmp/sftp_home
exit 0
}
# Create a Zenity window with only the "Stop" button
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - SFTP Server" \
--text="SFTP server started.\n\nAddress: $ip\nport: $port\nID:\tretrodeck\nPassword:\tretrodeck\npointing to:\n$rdhome\n\nPress Stop to terminate the server." --ok-label="Stop" || stop_ssh_server
# If the user clicks "Stop", call the function to stop the SSH/SFTP server
stop_ssh_server

View file

@ -284,33 +284,25 @@ modules:
# dependency of: CEMU, RPCS3 # dependency of: CEMU, RPCS3
- rd-submodules/shared-modules/glew/glew.json - rd-submodules/shared-modules/glew/glew.json
# FTP Server # SFTP Server
# TODO: address
- name: vsftpd - name: sftp-hostname
buildsystem: simple buildsystem: simple
build-commands: build-commands:
- ar -x vsftpd*.deb - ar -x hostname*.deb
- rm -f vsftpd*.deb
- tar -xf data.tar.zst - tar -xf data.tar.zst
- rm -f control.tar.gz data.tar.zst debian-binary - cp -r bin/* ${FLATPAK_DEST}/bin
- cp -r usr/* ${FLATPAK_DEST}
- rm -rf usr lib etc
- mkdir -p ${FLATPAK_DEST}/retrodeck/ftp
- mkdir -p ${FLATPAK_DEST}/libexec - mkdir -p ${FLATPAK_DEST}/libexec
- cp -vf virtual_users.txt vsftpd.conf ${FLATPAK_DEST}/retrodeck/ftp
- cp -vf ftp_server.sh ${FLATPAK_DEST}/libexec - cp -vf ftp_server.sh ${FLATPAK_DEST}/libexec
- chmod +x ${FLATPAK_DEST}/libexec/ftp_server.sh - chmod +x ${FLATPAK_DEST}/libexec/ftp_server.sh
sources: sources:
- type: file - type: file
url: http://de.archive.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.5-0ubuntu1_amd64.deb url: http://de.archive.ubuntu.com/ubuntu/pool/main/h/hostname/hostname_3.23ubuntu2_amd64.deb
sha256: 248582c4511ceaab5fd0d7f28d3a95af1a946a83bffe1a36d1accb72d99c2cf8 sha256: cec0448fef88a43a3c232fd9df555ca4c468cf5e16ddf3a1b0a5f7b7f076e413
- type: file - type: file
path: tools/ftp/virtual_users.txt path: functions/sftp_server.sh
- type: file
path: tools/ftp/vsftpd.conf # SFTP Server - END
- type: file
path: functions/ftp_server.sh
# ES-DE - START # ES-DE - START
# https://gitlab.com/es-de/emulationstation-de # https://gitlab.com/es-de/emulationstation-de

View file

@ -61,7 +61,7 @@ source /app/libexec/global.sh
# - Install: RetroDECK SD Controller Profile # - Install: RetroDECK SD Controller Profile
# - Install: PS3 firmware # - Install: PS3 firmware
# - RetroDECK: Change Update Setting # - RetroDECK: Change Update Setting
# - Start FTP Server # - Start an SFTP Server
# - Troubleshooting # - Troubleshooting
# - Backup: RetroDECK Userdata # - Backup: RetroDECK Userdata
# - Check & Verify: BIOS # - Check & Verify: BIOS
@ -529,7 +529,7 @@ configurator_retrodeck_tools_dialog() {
"Install: RetroDECK SD Controller Profile" "Install the custom RetroDECK controller layout for the Steam Deck" \ "Install: RetroDECK SD Controller Profile" "Install the custom RetroDECK controller layout for the Steam Deck" \
"Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" \ "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" \
"RetroDECK: Change Update Setting" "Enable or disable online checks for new versions of RetroDECK" \ "RetroDECK: Change Update Setting" "Enable or disable online checks for new versions of RetroDECK" \
"Start FTP Server" "Start an FTP server to manage your retrodeck folder from another device" "Start an SFTP Server" "Start an SFTP server to manage your retrodeck folder from another device"
) )
case $choice in case $choice in
@ -574,8 +574,8 @@ configurator_retrodeck_tools_dialog() {
configurator_online_update_setting_dialog configurator_online_update_setting_dialog
;; ;;
"Start FTP Server" ) "Start an SFTP Server" )
source /app/libexec/ftp_server.sh source /app/libexec/sftp_server.sh
;; ;;
"" ) # No selection made or Back button clicked "" ) # No selection made or Back button clicked
@ -989,7 +989,7 @@ configurator_reset_dialog() {
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Reset Specific Emulator" "Reset only one specific emulator to default settings" \ "Reset Specific Emulator" "Reset only one specific emulator to default settings" \
"Reset All Emulators" "Reset all emulators and FTP server to their default settings" \ "Reset All Emulators" "Reset all emulators to their default settings" \
"Reset RetroDECK" "Reset RetroDECK to default settings" ) "Reset RetroDECK" "Reset RetroDECK to default settings" )
case $choice in case $choice in
@ -1044,7 +1044,7 @@ configurator_reset_dialog() {
;; ;;
"Reset All Emulators" ) "Reset All Emulators" )
if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators and FTP server to their default settings?\n\nThis process cannot be undone.") == "true" ]]; then if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to their default settings?\n\nThis process cannot be undone.") == "true" ]]; then
( (
prepare_emulator "reset" "all" prepare_emulator "reset" "all"
) | ) |

View file

@ -1 +0,0 @@
retrodeck:retrodeck

View file

@ -1,17 +0,0 @@
# vsftpd config file
anonymous_enable=NO
virtual_users=YES
userlist_file=/var/config/ftp/virtual_users.txt
userlist_enable=YES
userlist_deny=NO
write_enable=YES
local_root=RETRODECKHOMEDIR
chroot_local_user=YES
local_umask=000
listen_port=777
xferlog_enable=YES
xferlog_file=RETRODECKHOMEDIR/.logs/ftp.log
log_ftp_protocol=YES
ftpd_banner=Welcome to RetroDECK
force_dot_files=YES